个人感受,觉得很重要的是三点
1. 集中快速按照专题去刷 2. 战线不要过长 3. 及时回顾和总结
大概说下我刷题的过程。
是在读研阶段,准备一次春招实习的时候,开始下决心好好刷Leetcode,那个时候加入了一个打卡群。打卡群是按照专题去刷的。每天一道题就完成打卡,但自己实际上每天会在这个专题刷3道以上。
大概持续了两个多月的时间,自己把比较常见的200多道算法题都刷完了。从这之后,没有再系统刷过题了。但每次准备面试,基本上只需要刷一两题激活下手感,面试解题思路就比较清晰了,面试基本上没有再因为算法题考察block了。
所以刷题很重要的一点是,按照专题去刷,这样,会对这个数据结构或者算法,有深入理解。这样的话,后面很难会遗忘。如果有暂时想不到的,可以先看题解,理解思路,慢慢地这个专题的算法题就可以自己写出来了,不要没有思路一直死磕,这样也容易浪费时间。
而且战线不宜过长,两三个月集中训练就可以。一天一题刷半年这样的,不容易加深理解,而且也会因为时间太久导致倦怠。
Leetcode上的专题很多,但实际上第一步只需要把常见的链表,二叉树,排序,二分查找,哈希表,DFS/BFS,动态规划,组合/排列等常见专题刷完就OK了。面试时候遇到的80-90%也就是这样的算法题了。
举例来说,二叉树类型的算法,无非就是依赖parent -> left/right child这样的关系去做,大部分是递归,会有少部分迭代。
还有开始觉得比较难的动态规划算法,难点就在于如何建立状态转移方程,当见过的场景比较多之后,就比较容易抽象出一维或者二维的方程。
当刷完某个专题的时候,可以快速把这个专题的内容回顾,巩固记忆,加深全局理解。
刷得比较多了之后,可以通过参加周赛这样的形式来保持手感,同时也是个查漏补缺的过程。
这里再推荐两个常用的刷题助手,可以用于针对性的提升和面试准备。
一个是Leetcode算法题的一些总结思考,Labuladong的小册子:LABULADONG 的算法网站
二是针对各个互联网公司的面试算法题的企业题库: CodeTop —— 汇总互联网大厂面试的高频考题
最后其实想说,算法题只是提升自己的一部分(其实更多是为了满足企业面试的要求),如何在工作和自己的项目中快速学习和应用知识,可能是更重要的事情。