
额,可能没什么体验,我是"龟派刷题人”,就是那种刷题速度很慢的选手。。。
我刷题不多,就力扣600多道 + 剑指offer 2遍,然后就再也没刷过什么其余的题了。
我一直很清晰的知道自己刷算法题目的是找工作,不是刷穿力扣,更不是去打什么ACM。。。
我不是为了刷题而去刷题,我是为了找工作而去刷题的,这一点我时刻谨记,
哪怕是后面拿到不少互联网中大厂的offer如百度、华为、字节跳动SP等后,我一直记得自己最初开始刷题的目的,就是为了找工作,仅此而已。
具体来说,在我以前找工作前,我将剑指offer刷完三遍、LeetCode HoT 100 刷完 + 14个LeetCode 常规Tag,共计600余道题。
其中对于比较经典的题型都用不同的方法会进行二刷或者三刷,甚至四刷、五刷,从时间&性能上去提升。
就这样前期做足准备后才去找的互联网工作互联网,最后顺利拿下字节跳动SP的研发岗offer,一毕业就在字节跳动抖音用头发换工资花。
不过在我以前刷题的时候有一个很烦的点,那就是没有什么固定的刷题顺序。。。我刷题的时候经常是东刷一点,西刷一点。
上周清华大学出版社给我寄了一本《算法面试:LeetCode专题精讲328题》。
趁着周末我看了一下,是按照每个专题固定给出一些优质的算法题目推荐的
这里拿栈和队列专题举例子,比如栈,它推荐了一些例题(⭐️代表难度,⭐️越多代表难度越高):
其中一些比较经典算题如最小栈、接雨水这种题基本都在,这样刷题的时候基本不会乱,也就不会像我以前那样自己东刷一题,西刷一题了。
可惜这种书是24年才出版的,我已经工作好几年了。。。每道题题目也是给出解法和参考代码,比如上文中提到的最小栈一题:
我当初刷题的时候速度比较慢也有一个原因是我比较喜欢记笔记!
比如LeetCode No.581最短无序连续子数组,和No643.子数组最大平均数,我就使用了不同的方法刷过三次,持续性的进行优化和提炼总结并且做好自己的学习笔记以及收获感悟。
尤其要说一下,做笔记是个好习惯,好记性不如烂笔头是真的。
我会重复刷这些题并不是因为我闲的没事做,而是因为以下三个原因:
1、从学习角度来说,很多难题都是从经典题型衍变而来的,掌握最根本的方法以不变应万变,而不是有一道新题就去刷一道新题,新题是源源不断涌现的,最重要的是掌握核心。
2、从面试角度来说,一些经典题型出现的频率往往更高,比如LeetCode 第84道题接雨水就曾经在华为互联网机试中出现过多次。
同样,在面试手撕算法中,十大排序中的快速排序出现频率也是相当高。
3、从应用角度来说,要想真正搞明白、弄清楚一道算法题的最优解,应该从时间复杂度和空间复杂度上去进行分析和追求极致,借助OJ上的算法性能评测,持之以恒的对经典题在时间和空间上进行改进优化。
比如力扣第581. 最短无序连续子数组 是一道很经典的数组类型题目,前后刷了三次,因为这是一道很经典的题目,very nice。
刷完这道题就可以试试力扣的No674.最长连续递增序列,类型基本差不多。
剩下的就是循环往复,不断重复整个过程。
其实以前就分享过自己是如何在最短时间内准备数据结构&算法面试的,已经收获了超过1000+赞 +和 5000+收藏,不过知乎特色不改,收藏:点赞比5:1。
既然题主提到以找工作为主,那就简单直接点,直接分享一下我的刷题方法。
其实核心就是一个,那就是不要为了刷题而去刷题,而是抱着一颗学会算法和顺利找到工作的心去刷题。
如果你时间比较紧张,那我建议你:
多看看我上面那个回答,在最短时间内搞定数据结构与算法以应付面试,毕竟找到工作才是最重要的,笔记算法考察趋势越来越严峻了,现在基本没有不考察DP和DFS、贪心这些算法的大厂了;
如果你还在读大学,有充足的时间,那我建议你:
而清华大学出版社最近出版的这本《算法面试:LeetCode专题精讲328题》,包括上下两册,其中上册讲数据结构,下册讲算法题目。
全书分为三部分,第一部分(第1~14章)为数据结构及其应;第二部分(第15~22章)为算法设计策略及其应用;第三部分(第23~25章)为经典问题及其求解。基本覆盖了数据结构与算法核心知识点 ,包括:
这两本书基本能cover住你的力扣笔试全部算法题了!
