大家好,我是「负雪明烛」。
一周前,我应 DataWhale 和「阿里云天池」的邀请,在 BiliBili 和天池直播分享了「LeetCode 应该怎么刷?」这个话题。
可能有些朋友不太不了解 DataWhale 和天池,我先简单介绍一下。
DataWhale 是国内的一个的开源组织,汇聚了国内很多高校和企业的优秀学习者,打造了一系列的开源学习课程。通过组队学习的方式,DataWhale 带领大家一起学习。在国内的开源组织里面,DataWhale 的发展势头很好。
天池是国内影响力非常大的竞赛网站,有算法、工程领域的比赛,现在官网也出了机器学习、数据挖掘、算法的学习课程。如果你在天池中拿到的优质奖项,找工作时会很受认可。
这次我能收到 DataWhale 和天池的邀请,我还是挺激动的哈哈哈!!
这是我直播「LeetCode 应该怎么刷」的视频回放,大家可以直接观看。
下面是我整理的精华版文字稿。
全文分为入门篇和提高篇。
入门篇
LeetCode 应该怎么入门呢?
基础知识
在刷题之前,需要掌握基础的知识:
数据结构与算法基础 一门熟悉的编程语言
两者的交集部分就是编程语言操作数据结构与算法的 API。
如果没有这个基础,题目很难做出来的哈,所以应该先打好基础再做题。
刷题姿势
在正式刷题之前,需要明确刷题目的:
找工作 考研机试 爱好
不同的刷题目的,做题的方式和策略是不一样的。我相信大部分人刷题就是为了找工作,所以我后文会以找工作为例展开。
对于新手而言,在拿到一个题以后,应该按照什么流程刷题呢?
读题 思考:用什么数据机构、算法,时间复杂度是否符合要求。(LeetCode 大部分简单、中等的题目只考一个数据结构与算法) 看题解:如果思考了 5 分钟还没有思路,一定不要死抠;要学会、理解别人的思路 默写:根据学习到的思路,默写一遍,如果出错,要会自己 debug。如果还不会,就再去看题解。 优化、总结:勤于总结,后文有讲。 多练习:勤能补拙是良训,刷题多了就熟练了。
最终要形成 思考 → 学习 → 练习 → 思考 的闭环。
刷题顺序
LeetCode 现在 2000 多题,实在太多了。绝大多数人都会考虑刷题顺序这个问题。
就像我在前面说的,一定要明确刷题目的:不同的刷题目的,有着不同的刷题策略。
我们要在有限的时间里,追求最大的投资回报率 ROI,所以要找到适合的刷题顺序。
另外,不要盲目追求刷题数目,因为刷得多不代表刷的好,而且 ROI 可能会很差。
选择题目时,可以按照这个标准:
按照题型分类刷,Easy → Medium 优先刷 树、链表、二分查找、DFS、BFS 等面试常考类型 优先刷题号靠前的题目 优先刷点赞较多的题目
针对找工作而言,可以刷这几个题单:
剑指 Offer
CodeTop 高频面试题目(我整理)
点赞最高的100道题目(我整理)
刷题资料
现在世面上的刷题资料挺多的,我推荐的是我读过的比较认可的。
题解作者这块,我推荐:负雪明烛、李威威、花花酱、Grandyang。
我要恬不知耻地推荐一下我自己的公众号:「负雪明烛」,麻烦点个关注+星标,会持续分享刷题找工作的干货。
模板可以看我的 CSDN 博客:【LeetCode】代码模板,刷题必会,该文章已经 8 万阅读了,是我传播最广的文章。
我推荐这几本书籍:
《啊哈!算法》:用漫画的形式介绍算法,通俗有趣,可以作为入门书籍 《算法(第 4 版)》:经典、权威的算法入门教材;书籍比较厚,可以挑重点看 《挑战程序设计竞赛》:竞赛的教学书籍,会介绍一些略微少见的算法,可以作为提高 《计算机考研——机试指南》:考研时读过的刷题资料;会介绍 API,很实用的入门书籍
总结与交流
总结的重要性,我不再赘述了。要强调的是一定要用自己的话总结题目、套路,形成自己的做题观。
交流这方面,可以通过题解区、交流群、私信等方式交流,相信大家在这块应该做的比较好了吧哈哈😂
在算法刷题刚入门的时候,要注意:
要有总体规划,不盲目刷。 不追求刷题多,追求掌握得牢! 与自己不会的题、知识点较劲,不要待在舒适区!
特别是当你做题有些感觉的时候,一定要牢记第 3 点,否则容易陷入舒适区。
提高篇
如果你过了入门的阶段,可以尝试下周赛、模拟面试。
周赛
我非常推荐通过周赛来检测自己现在的算法能力。周赛可以在有限的时间里,没有外界资料和帮助的情况下,做个模拟考试。
做周赛的过程中,大脑会专注思考,所以记忆也会更牢。
无论自己做没做出来,在赛后都要学习别人的解法。他山之石,可以攻玉。
不会的题目,说明是自己的短板,赛后补一补同类型的题目。
有同学会问:刷到什么程度,可以打周赛呢?我觉得如果你能做出常见的简单题目,遇到中等题目偶尔也有想法,那就可以尝试周赛了哈!
模拟面试
针对找工作刷题,还可以通过模拟面试,检验一下自己。
写代码和解释代码是两种不同的感觉。可能自己做出来了,但是又说不清楚,这样在面试中也是不合格的。模拟面试官的有价值的反馈,能帮助自己点拨迷津。
其实,平时在做题后,也可以通过「说」的方法,检验自己。我是通过写题解的方式,来实现的。
很多时候,我能做出来题目,但是我在写题解时找不到思路。也就是处于「懵懵懂懂」的状态,这种情况,还需要自己再思考、琢磨,直至彻底弄懂。
最后
LeetCode 应该怎么刷?可能没有标准的答案。但是,有些做题原则是可以遵守的。
LeetCode 是练出来的,不是看出来的。
多刷、多总结、多死磕自己不会的题目。
多花点时间,就能有突破。
归根到底,刷 LeetCode 就是一个考验熟练度的事情。就像有很多关卡的游戏,玩得多了,也就成大神了。
无他,唯手熟尔。
这是我持续坚持写作的第 1/3 天。
关注负雪明烛,点亮算法学习之路!
我是负雪明烛,本科、研究生就读于北京邮电大学。
坚持刷算法题 7 年,写了 1000 多篇题解,博客累计阅读量 400 万+。曾在字节跳动、阿里巴巴等大厂工作。
关注我,你可以获得优质算法题解、找工作经验技巧、模拟面试、大厂内推。
这是一个用心在做的公众号,欢迎点击关注+星标!