实不相瞒,我是大二才意识到要刷算法题的,此前自己基础很差,所以为了进大厂以及准备保研,我用一年半的时间,刷了 1000 多道 算法题目(LeetCode 600+、PAT、其他名校 OJ 400+),也总结了一些经验方法分享给大家。
很多朋友刚开始刷 LeetCode 可能都会怀疑自己的 “智商”,但是初次接触 LeetCode 时感觉仍然像是走进了一个船新的世界,感觉上面的题目自己无从下手。
不过当我找到了诀窍后,渐渐发现 LeetCode 也没有那么恐怖。我是从大二开始刷算法的,每天坚持留 2 个小时,刷 2-3 道题目,大概过了一年,面试中的算法题目基本都可以迎刃而解!也帮助我拿到了一些大厂的 offer,最后入职鹅厂。
我总共刷了 1000 多道算法题目,光在 LeetCode 上就有 600 多道(简单、中等各占一半),还刷了一些其他平台或书籍上应对面试的题目。
像书来说,可以提供做题的参考顺序和比较准确的解题思路,最好还能做到知识点的回顾,最近清华大学出版社出了一本新书《算法面试》,作者是武大教授李春葆老师,我也有幸写了书评给大家推荐。LeetCode 还专门给这本书定制了做题环境,买书兑换付费的 plus 会员题目,非常全面。
我认为在刷题过程中比较重要的几个方面,这本书都涵盖了,比如:
1、比较科学的刷题顺序
三个要点:从【算法和数据结构专项】刷起,从【简单的】刷起,从【通过率高】的刷起!
这本书里从算法到数据结构进行了比较全面的梳理,每章节前都有思维导图,每个小节通过相关的题目进行演练,相对自己零散地选题目来说,体系会更加清晰。如果对知识点有遗漏书里还配套了教学视频做回顾。
题目也按照力扣上的难度星级做了标注,方便筛选。
像面试无非就那么几个重点:树、动态规划、深度 / 广度优先搜索、链表、数组、排序、栈、队列、哈希、字符串等。理解其背后的算法和数据结构之后做题,像重点题目书里会重复出现,而且有不同的解题思路,目的就是要做到 一题多解。再举一反三,练习更多相关的题目,当你能做到用同一个算法解决一类共性问题,做到 多题一解 时,才算是真正理解了。
2、利用题解
题解包括两个部分,读思路 和 读代码,既要理解作者做题的思路和逻辑,也要细致入微地学习代码中优秀的写法。
因此自己做完题目后,一定要再对照书里的题解学习。书里的题解有C++和Python两种语言,代码也是做了规范化处理,变量名称和算法策略都是统一的,在LeetCode平台上提交通过。不建议背代码,但完全可以直接拿着用。
另外,要 多写题解 ,把自己的解题思路整理成文,或者讲给别人听。这样做不仅能够加深自己对题目的印象,进一步加深对算法的理解,帮助自己回顾解题过程,从而在面试的时候更容易复述。
3、精益求精
当你每次成功解题时, LeetCode 系统会生成一份解题报告,告诉你的程序在时间和空间上击败了多少用户。但不同的刷题目的要求也是不一样的,如果是面试,尽量按照书中要求的时间空间做规范,越接近书中的标准就能拿更多的offer。
所以仅仅答对题目是不够的,你需要更优解,不断按照书中的提示优化代码,可以找到更多的思路,直到击败 100% 的用户。
最后,建议大家刷题一定要拉长战线、养成习惯,千万不要急于求成、爆发式刷题!之前,我一年半在 LeetCode 刷了600+,这套书一共 328 道题,开始之前仔细规划一下做题进度,如果有更多的精力,每章后面还有推荐习题可以做。
万事开头难,希望大家不要怀疑自己的能力,更不要怀疑自己的智商。算法和编程语言学习一样,找对方法,付出努力,一定会有进步的!
另外给关注鱼皮公众号的朋友申请到了 5 套书抽奖 ,在这篇文章下留言即可参与~
等不及的小伙伴也可以在下方链接购买,目前是 🧧 五折优惠(上下共两册,800 页+)