先放一下我在 LeetCode 上的做题进展。

刷题姿势揭秘:我是如何刷 LeetCode 的?

刷题姿势揭秘:我是如何刷 LeetCode 的?

大约是从 2018 年 12 月份开始做题,2019 年 3 月基本稳定「每日一题」,这两周因为忙自己的私事又有些躲懒了。(捂脸逃

虽然我是软件工程专业毕业的,但是由于大学的时候一门心思在应用开发身上,「算法与数据结构」这门课重要的课程我并没有学好。所以开始刷 LeetCode 的时候我完全就是「入门小白」一个。

对于一个「小白」来说,会经历几个痛苦的阶段:

  1. 拿到一道题(或许就是道 Easy 题),完全没有思路
  2. 好不容易有思路了,却是最笨的解法,甚至有时直接超时
  3. 做了一段时间题,(误)以为自己变强了,于是参加周赛,结果被大佬们摁在地上摩擦……

这几个痛苦的阶段很难度过,并且非常打击人的自信心。结合我近一年的刷题感受,我觉得对于刚起步的「小白」而言,最重要的还是从刷题的过程中获得足够的自信心和满足感

下面是我建议的刷题步骤:

按标签做题

刚起步时,建议先做简单的、特定标签下的题。

LeetCode 上有提供一个标签列表:

刷题姿势揭秘:我是如何刷 LeetCode 的?

你可以按照自己喜欢的顺序来选择标签做题:例如先做数据结构相关的题,比如数组、字符串、链表等;然后再做算法相关的题,比如二分、动态规划、广搜、深搜等。

这里推荐一个网站 OI Wiki,上面包含了编程竞赛中的基础知识、常见题型、解题思路以及常用工具等,内容非常详尽。可以先在该网站上复习某个知识点,然后再前往相关标签刷题,配合食用更健康~

没有思路的处理方法

这个时候往往会怀疑人生,特别是你手上拿着一道 Easy 题的时候。

我们要知道,如果一道题不是变态难度,我们却对它没有任何思路,这往往是因为:你还没有形成自己的解题框架

而这种解题框架的形成,需要大量的题目来支撑。

说白了就是:你还刷得不够多啊少年人

所以刚起步的时候对一道题完全没有思路是可以理解的,也没有必要感到悲伤难过。如果没有思路,那就去看题解吧!

当然,看完解答你还要做以下这些事:

  1. 理解题解的内容
  2. 关掉题解,自己用代码实现一遍
  3. 把这道题放入自己的小本本里,等待下次复盘,下次复盘的时候就不要再看答案啦

这样一来,即便是通过看题解完成的题目,你也加入了自己的思考和行动,题目 AC 的时候也会给自己带来满足感。

跳出标签

按标签刷了足够多的题以后,你已经大概拥有一个特定类型的解题框架了,即知道什么样类型的题目该用什么套路做。

不过这个解题框架还在特定的标签下。比如你在动态规划标签下做题,那么你拿到题之前就会知道这题要用动态规划来做。这样当然是不行的,你去面试人家才不会告诉你面试题是什么类型,你要自己去思考发现。

所以我们要做的就是跳出标签,自己去随机找题做,在不知道题目类型的情况下靠自己去解决这道题

探寻最优解

当你摆脱标签的束缚并且做了足够多的题以后,你再拿到一道题的时候,眼前就会自然而然地浮现出这道题的考点和解决套路(是的就是这么魔幻)。也就是说,你已经形成了自己的解题框架了

然而这还远远不够!

一道题往往不会只有一种解法,而你想到的方法往往也不是最优解

当你已经能 AC 大部分题目、在刷题上找到自信后,是时候出发去探寻这些题目的最优解了!

在这个过程中,你会慢慢地:

  • 对题目的用例范围开始敏感
  • 开始在意算法的复杂度
  • 感叹真理的美妙

分享出去

明白一个知识点或许很简单,但要把它清楚、明白地讲给别人听却不那么容易。这要求你把知识点揉碎、吸收、完全理解,成为自己的一部分,然后才能流畅地输出给别人。

所以,验证你是否已经完全理解题解的方式很简单,就是把它写下来

我一直坚持在 LeetCode 的评论区和题解区输出题解,现在我已经把它整理到 GitHub 上JalanJiang/leetcode-notebook,以此督促自己不断更新。

参加周赛

LeetCode 每周天都会举办一次周赛,每两周的周六晚会举办一次双周赛。周赛的模式和面试比较接近,题目的未知性和时间的限制会给人紧迫感。如果你觉得你已经掌握了大部分解题套路,你就可以参加周赛练练手了。周赛的排名机制也会督促着你不断变强!

刷题小贴士

不要过分追求题量,而要追求做题的质量。当你刷完一道题后不妨问问自己:

  • 是否已经完全理解了题目的解法?
  • 是否知道题解的复杂度?
  • 题目是否还有更优的解法?
  • 下次再遇到这道题我还会做吗?

大家在刷题中肯定会遇到各种各样的负面情绪,比如觉得自己进度太慢、不够聪明等等。但是要知道,知识的积累本来就是个漫长的过程,走得慢一些又何妨呢?只要方向是对的,我们终将走得很远


如果你觉得文章写得不错,请帮我两个小忙:

  1. 点赞并关注我,让这篇文章被更多人看到
  2. 关注公众号「编程拯救世界」,你将第一时间获得新文章的推送

你的鼓励是我写作最大的动力,感谢大家!
刷题姿势揭秘:我是如何刷 LeetCode 的?

相关文章: