1、前期准备
如果你是一个对基础算法和数据结构完全不懂的小白,那么在刷 LeetCode 之前,建议先学习一下基础的「数据结构」和「算法」知识,这样在开始刷题的时候才不会那么痛苦。
基础的「数据结构」和「算法」知识包括:常考的数据结构:数组、字符串、链表、树(如二叉树)等。
常考的算法:枚举算法、递归算法、分治算法、回溯算法、贪心算法、动态规划等。
2、刷题顺序
讲个笑话,从前有个人以为 LeetCode 的题目是按照难易程度排序的,所以他从「1. 两数之和」开始刷题,结果他卡在了「4. 寻找两个正序数组的中位数」这道困难题上。
LeetCode 的题目序号并不是按照难易程度进行排序的,所以除非硬核人士,强烈不建议按照序号顺序刷题。如果是新手刷题的话,推荐先从「简单」难度等级的算法题开始刷题。
等简单题上手熟练之后,再开始按照标签类别,刷中等难度的题。中等难度的题刷差不多之后,可以考虑刷面试题或者难题。 LeetCode 官方网站上就有整理好的题目不错的刷题清单。
可以先刷这里边的题目卡片。还有相应的面试题和竞赛题,如果大家想知道按什么顺序刷题,可以看以下目录
推荐刷题顺序和目录如下:
1. 初级算法
2. 数组类算法
3. 数组和字符串
4. 链表类算法
5. 哈希表
6. 队列 & 栈
7. 二分查找
9. 二叉树
10. 中级算法
11. 高级算法
12. 算法面试题汇总
3、刷题技巧
简单来说,可以分为 5 条:
五分钟思考法重复刷题按专题分类刷题写解题报告坚持刷题五分钟思考法
第一个技巧是「五分钟思考法」。「五分钟思考法」的意思是:如果一道题如果 5 分钟之内有思路,就立即动手写代码解题。如果 5 分钟之后还没有思路,就直接去看题解。然后根据题解的思路,自己去实现代码。如果发现自己看了题解也无法实现代码,就认真阅读题解的代码,并理解代码的逻辑。
这种刷题方法其实跟英语里边的背单词过程是类似的。
一开始零基础学英语的时候,先学最简单的字母,不用纠结为什么这个字母这么写。然后学习简单的单词,也不用去纠结这个单词为啥就是这个意思,学就完事。在掌握了基本词汇之后,再去学习词组,学习短句子,然后长句子,再然后再看文章。
而且,在学英语单词的时候,也不是学一遍就会了。而是不断的重复练习、重复记忆加深印象。
算法刷题也是一样,零基础刷题的时候,不要过分纠结怎么自己就想不出来算法的解法,怎么就想不到更加高效的方法。遇到没有思路的题目,老老实实去看题解区的高赞题解,尽可能的让自己快速入门。
重复刷题
第二个技巧是「重复刷题」。
算法题有时候一遍刷过去,过的时间长了可能就忘了,看到之前做的题不能够立马想到解题思路。这其实还是跟背单词一样,单词也不是看一遍就完全记住了。所以题目刷完一遍并不是结束了,还需要不断的回顾。
而且,一道题目可能有多种解法,还可能有好的算法思路。
最开始做的时候,可能只能想到一种思路,再做第二遍的时候,很有可能会想到了新的解法,新的优化方式等等。
所以,算法题在做完一遍之后遇见不会的,还可以多刷几遍,不断加深理解。
按专题分类刷题
第三个技巧是「按专题分类刷题」。
在上边「3. 刷题顺序」我们给出了刷题顺序和目录。这里的刷题顺序其实就是按照不同分类来进行排序的。
我们可以在学习相关算法和数据结构知识时,顺便做一下该算法和数据结构知识专题下对应的题目清单。比如在学习完「链表」相关的基础知识时,可以将「链表」相关的基础题目刷完,或者刷官方 LeetBook 4. 链表类算法中的对应题目。
按照专题分类刷题的第一个好处是:可以巩固刚学完的算法知识。如果是第一次学习对应的算法知识,刚学完可能对里边的相关知识理解的不够透彻,或者说可能会遗漏一些关键知识点,这时候可以通过刷对应题目的方式来帮助我们巩固刚学完的算法知识。
按照专题分类刷题的第二个好处是:可以提高刷题效率。因为同一类算法题目所用到的算法知识其实是相同或者相似的,同一种解题思路可以运用到多道题目中。通过不断求解同一类算法专题下的题目,可以大大的提升我们的刷题速度。
写解题报告
第四个技巧,也是我觉得最有用的技巧是「写解题报告」。
刷算法题,有一个十分有用的技巧,就是「写解题报告」。如果你刷完一道题,能把这道题的解题步骤,做题思路用通俗易懂的话写成解题报告,那么这道题就算是掌握了。这其实就相当于「费曼学习法」的思维。
这样,也可以减少刷题的遍数。如果在写题的时候遇到之前刷过的题,但一时之间没有思路的,就可以看看自己之前的解题报告。这样就节省了大量重复刷题的时间。
坚持刷题
第五个技巧,也是最后一个技巧是「坚持刷题」。
算法刷题没有捷径,只有不断的刷题、总结,再刷题,再总结。千万不要相信很多机构宣传的「3 天带你精通数据结构」、「7 天从算法零基础到精通」能让你快速学会算法知识。
学习算法和数据结构知识,不能靠速成,只能靠不断的积累,一步一步的推敲算法步骤,一遍又一遍的理解算法思想,才能掌握一个又一个的算法知识。而且还要不断的去刷该算法对应专题下的题目,才能将算法知识应用到日常的解题过程中。这样才能算彻底掌握了一个算法或一种解题思路。
根据我过去一年多和小伙伴们一起刷题打卡的经验发现:那些能够坚持每天刷题,并最终学会一整套「基础算法知识」和「基础数据结构知识」的人,总是少数人。
4、写在最后
大部分总会因为种种主观和客观原因而放弃了刷题(工作繁忙、学习任务繁重、个人精力有限、时间不足等)。
但不管怎么样,如果你当初选择了学习算法知识,选择了通过刷题来通过面试,以便获取更好的工作岗位。那我希望在达成自己的目标之前,可以一直坚持下去,去「刻意练习」。在刷题的过程中收获知识,通过刷题得到满足感,从而把刷题变成兴趣。
Uoffer保实习项目,通过与北美企业官方合作的实训项目,针对学生目标领域进行专业能力培训,从而提升学生实战经验和项目经验。如果有需要的点击【实训产品】了解详情。