今年的2月比往常更长,不是因为比往年多了一天,而是被病毒隔离在家的日子显得十分漫长。如果再不给自己找点事情做的话,且不论身体方面的健康状况,精神方面可能也会有些隐忧。做为一名工程师,适时地读上几本平日可能没时间阅读的好书,应当是不错的选项。而除此之外,也可以做点有趣的算法题目以做消遣。

当今,LeetCode这个网站已经广为人知。打算刷算法题时,它几乎是必然的选择。当然国外还有CodeWar,国内也有牛客网这样的备选。不过由于几年前也曾在LeetCode上玩过几题的关系,当再次有刷题想法的时候,还是回归到那熟悉而又陌生的地方。

最开始的时候可能也只打算投入几天的时间去重温下做题的感觉,但随着隔离时间的延长,且年内计划也制订了认真研习算法这一项,不知不觉每日持续做题的日子已经过去一个月了。

迄今为止,简单难度的题目做了68道,中等难度的题目做了42道,困难难度的2道,总计112道。

先刷的是简单的题目,闲来一天可以做个5,6题,再之后开始做中等难度的,每日坚持做3题,至于困难的题目,则是无事可做时想尝试下挑战的。当然这样的结果是必然查找功略才能有些线索。

LeetCode经过数年的发展,已经从最初的触手可及的100多道题,变成为拥有1364题的真正意义上的题库,这个数字记录截止于2020/2/29,之后肯定还会增加。(在做题的时候就发现其偷偷地又多了几题)

我刷题的方式不是如他人一般选取其前几百题做为开端,而是采用主题突破的策略。

在LeetCode网页的右侧有各种主题的汇总。

  • 数组 226
  • 动态规化 185
  • 数学 171
  • 字符串 159
  • 树 128
  • 哈希表 122
  • 深度优先搜索 117
  • 二分查找 84
  • 贪心算法 73
  • 广度优先算法 65
  • 双指针 60
  • 栈 54
  • 回溯算法 53
  • 设计 46
  • 位运算 44
  • 排序 43
  • 图 40
  • 链表 37
  • 堆 34
  • 并查集 29
  • 滑动窗口 20
  • 分冶算法 19
  • 字典树 17
  • 递归 15
  • 线段树 12
  • 有序字典 10
  • 队列 9
  • 极小极大算法 8
  • 二叉索引树 6
  • 行扫描算法 6
  • 随机算法 6
  • 拓扑排序 6
  • 迷题 5
  • 几何算法 5
  • 二叉查找树 2
  • 拒绝采样 2
  • 水库采样 2
  • 旋转哈希 2
  • 记忆 1
  • 后缀数组 1

可以看到在各个主题之中,渉及数组的题目占比最多。稍做思考,不难想出这一结果也合乎情理,毕竟数组是最基本的数据结构,如果不把其弄清楚,想明白,更没有能力去触及其它算法与数据结构的内容了。

于是顺乎其理,我以数组这一主题开始了算法新旅程。刚入手时其题目数还是224道,结果两周后又增加了2道,目前还未有进一步的更新,所以并不清楚LeetCode题库更新的频率。

在刷题的时候会发现,一道题目往往不仅牵扯单一主题,还会与其它主题相关,做这类题目时获得的收获往往也更多。同时网站上确实有功能可以将题目所附的标签显示出来,建议最初时不要打开这一选项,因为知道了题目的特性,可能也就明白了解题的思路,但在刚开始答题的阶段,这样的提示并不有利于思考,只有在自身经过一番推敲琢磨之后,再查看这些信息,才能获得更佳体验。

当然,做这些题目,尤其是中等以上难度的题目,既使花上几个小时,解不出题,也是正常的情况,本人便是一例。因为之前没有仔细在算法方面打磨过自己,对算法题的生疏也是在所难免。这并非要给自己找一个推脱的借口,算法,就像其它有价值的能力一样必须要经过相当时间的刻意练习,才可以达成某种程度的熟练度。

种一棵树最好的时间是十年前,其次是现在。既然十年前自己没有努力提升算法能力,那么到了今日,还有这个念想的话,只有迈步前行一个方法而已。

这里只是些闲谈,并不会详细记录每道题的解法,在刷完数组主题所有题目后应该会有一篇比较详实的记录,这里又定了个小计划。再之后将会聚焦于LeetCode中100道最受喜爱的题目,完成后继续做总结,然后会是动态规划主题,还是需要总结,如此这般持续进行,虽然期望在一年内完成所有题目,但估计不太可行,不如退而求其次,能够养成经常做算法题目的习惯,反而会是更好的收获。

游LeetCode一月之闲谈的更多相关文章

  1. [LeetCode] Flip Game 翻转游戏之二

    You are playing the following Flip Game with your friend: Given a string that contains only these tw ...

  2. [LeetCode] Jump Game II 跳跃游戏之二

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  3. [LeetCode] Flip Game II 翻转游戏之二

    You are playing the following Flip Game with your friend: Given a string that contains only these tw ...

  4. [LeetCode] 45. Jump Game II 跳跃游戏之二

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  5. 【转载】浅谈游戏开发之2D手游工具

    浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android  程序设计: 其它  编程语言:   引擎/SDK ...

  6. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  7. Remove Duplicates from Sorted List II 解答(有个比較特殊的case leetcode OJ没有覆盖)

    昨天被考了一道数据结构题,当时的实现比較一般.回来翻看leetcode,果然是上面的题.遂解之. accept之后翻看discuss别人的解法.发现非常多能够accept的代码都过不了我设计的一个ca ...

  8. [LeetCode] 909. Snakes and Ladders 蛇梯棋

    On an N x N board, the numbers from 1 to N*Nare written boustrophedonically starting from the bottom ...

  9. 最新 中手游java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.中手游等10家互联网公司的校招Offer,因为某些自身原因最终选择了中手游.6.7月主要是做系统复习.项目复盘.LeetCo ...

随机推荐

  1. ubuntu16.04更换 apt-get 阿里源

    deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb ht ...

  2. 流程控制 if-while-for -语句

    if 语句是用来判断条件的真假,是否成立,如果为ture就执行,为flase则跳过 1.python用缩进表示代码的归属 2.同一缩进的代码,称之为代码块,默认缩进4个      if 语句结构   ...

  3. Codeforces 1293A - ConneR and the A.R.C. Markland-N

    题目大意: ConneR老师想吃东西,他现在在大楼的第s层,大楼总共有n层,但是其中有k层的餐厅关门了. 然后给了这k层关门的餐厅分别所在的楼层. 所以问ConneR老师最少得往上(或者往下)走几层楼 ...

  4. 利用GIt命令上传项目到GitHub指定仓库

    1.建立GIt可管理的仓库 cd到本地项目根目录下,执行 git init 命令: git init 2.将项目的所有文件添加到仓库中(注意add后面有一个“ . ”) git add . 3.将上一 ...

  5. Regex of Perl: ?= 指的是如果后面匹配到,则后面的内容不做替换,保留。 ab, s/a?=b/x/,变为xb,即后面匹配到b,b保留不做替换

    Regex of Perl: ?= 指的是如果后面匹配到,则后面的内容不做替换,保留.  ab, s/a?=b/x/,变为xb,即后面匹配到b,b保留不做替换

  6. (一)Thread的run() 和 start() 方法

    Java多线程在实际开发中会遇到很多问题,对于这种争抢CPU时间片段的选手,我们或许有很多困惑,捉摸不透.即便如此,它也是可以被我们控制的. 最近在看Java多线程的书籍,里面有好多我曾经不怎么注意的 ...

  7. 吴裕雄--天生自然C语言开发:作用域规则

    #include <stdio.h> int main () { /* 局部变量声明 */ int a, b; int c; /* 实际初始化 */ a = ; b = ; c = a + ...

  8. F. Maximum Weight Subset(贪心or树形dp解法)

    题:https://codeforces.com/contest/1249/problem/F 题意:给一颗树,边权为1,节点有点权,问取到一个点集,俩俩之间路径超过k,是点权和最大 思路:贪心地取点 ...

  9. VMware安装 RHEL安装完后,选择桥接模式如何与主机网络连通

    .查看主机的ip与网关,dns配置,如图 2.在linux系统中打开cd  /etc/sysconfig/network-scripts/  #进入网络配置文件目录 vi  ifcfg-eno1677 ...

  10. scala编程(七)——内建控制结构

    几乎所有的 Scala 的控制结构都会产生某个值.这是函数式语言所采用的方式,程序被看成是计算值的活动,因此程序的控件也应当这么做.另外,指令式语言经常具有三元操作符(如 C,C++和 Java 的? ...