Leetcode 题目的正确打开方式

从2018年进行Leetcode的题目讲解以来,发现大家反馈的主要问题有以下几种:

  1. 被题目数量吓到:目前题库中的题目数量快1000了,每天做5个题目也得200天才能做完。
  2. 做了白做: 花了很大功夫做完的题目,没几天就忘光了
  3. 最优解不好理解:提交的算法都是垫底的,看了别人的算法又理解不深刻

针对这些问题,我也进行了反思,最后发现是我去,恐怕是题目的打开方式错了。大多数朋友在进行算法练习的时候都是这样做题的:

顺序做题

这种做题方式很大程度上造成了“记不住”和“做了白做”的问题,原因是没有形成某一类问题思维体系,下次遇到同类问题,又重头来过。

那根据类别做题看起来是个好选择,一些朋友是以这个顺序做的:

类别顺序

问题是这种模式下你会发现前几个类别的题目数量非常多,做到后面几乎是有种想吐的感觉,没有新鲜感,很多朋友甚至没法坚持做完一个类别。

前几个类别题目数量暴多

所以,我觉得,正确的做题顺序应该是由类别顺序的从下到上,也就是逆类别做题:
正确的打开方式

不信你看最下面的类别有多少道题目:
逆类别做题

这种做题方式,可以让你很快搞定一些类别,并且有成就感和新鲜感。网上很多人建议快速刷题,就是先直接看答案然后再n刷。对于这种方式我并不赞同,除了急着找工作的朋友,我觉得练习算法的目的是为了进行思维训练从而更好的解决我们实际应用中遇到问题。所以,不管如何,拿到题目首先一定要尝试自己去解答,即使没有能成功提交,但是再看别人的算法时才能发现思路的差异,也才可以有更深入的理解。

最后,不少朋友说,尝试自己求解时一不小心几个钟头就过去了。我的建议是设立Deadline,比如半个小时还没有能解题那么就去看别人的代码,这样来达到效率和理解的平衡。

从今年(2019)开始,我会按照类别逆序开始更新,并且对某一类别的题目进行思路总结。本人水平有限,智力不高,但想和大家一同进步,不当之处多多包涵。