从小白到 6 个 offer,我究竟是怎么刷题的?
首先介绍下我的编程基础,我学的是金融工程专业,硕士时学过 C++ 的课,这也是我的编程入门课(但我个人非常不推荐用 C++ 入门)。这门课的重点是 C++ 在金融领域的应用,比如给 Option 定价,基本不涉及算法和数据结构。
所以我是有一定编程基础的,但是对算法和数据结构是小白,也不懂空间复杂度和时间复杂度为何物。
另外说明一下我的时间,我是在工作后才开始刷题,所以是晚上和周末来刷,时间比较紧张,如果是学生的话在我的基础上要多刷一些哟。
下面上干货。
我把我的刷题过程分为 3 阶段。
第一阶段:打基础
时间是 3 个月,做了 128 道题,平均每天 1-2 题。
这一阶段刷题对我来说,是一个学习数据结构和算法的过程。
所以如果是科班的同学这一步就可以跳过了。
经常有同学问这个刷题顺序问题:
我认为在不同阶段是不一样的,那么第一阶段我是按照算法类型来刷,每个类型大概花 1-2 周的时间。
那到底先刷哪个类型呢?
刷 DP?
这不是劝退么?
这里对于小白来说,合理的学习曲线是非常重要的,否则一上来数据结构都不清楚去做难的算法题容易受打击。
那么怎样才是合理的学习曲线呢?
我说的不算,其他人的也只是他个人经验,而应该是看名校的口碑课程是怎么安排的,看教授为你制定的学习计划。
比如第一周,我们去刷排序算法。
那在这个具体的分类下,题目按什么顺序来做呢?
把题目按照频率从高到低的顺序来做,也就是出现频率高,常考的我们先做。
那对于每一道题应该怎么做呢?
首先我会先自己思考 5 分钟,那如果过了 5 分钟还没有任何思路,就不必强求了,看答案吧。
Leetcode 有一个讨论区,里面有非常多的大神给的解答,重点不是看他的代码,而是看他怎么想的,怎么分析的这个问题。
如果还没有理解,那我会去搜一下视频讲解。
这里推荐一个小哥,也是我唯一推荐的 Leetcode 视频讲解:
国内的小伙伴可能不太方便看这个,大家在留言区说下你推荐的视频讲解吧~
对于在北美求职的同学,这小哥的英文对面试也会非常有帮助。
这样就把一个刷题计划落实到了第一个分类、第一周、第一天该做什么。
但是做完题不是就万事大吉了,最重要的一步是需要吸收、内化成自己的。
我喜欢的是写“解题报告”:
<<< 左右滑动见更多 >>>
把这道题考查了哪些知识点,正确的思路是怎样的,别人是怎么想到的,代码是怎么写的,代码有什么小技巧,都记录下来。
这个是跟我当时一起刷题的小伙伴学的,并且我们互相讲题,这样效果更好。所以这里强烈建议大家组队刷题,互相监督提高。
那么周末的时候复习和总结,我一般会做:
重新做一遍本周做过的题目,不是背答案,而是自己再去想一遍; 再做几道新题; 看书,建立更系统的知识体系。
这里看书不是指把书从头看到尾,而是抓住重点章节,比如排序算法,那就参考 MIT 教授给你画的重点,只看《算法导论》的这些章节,这才是偷懒的正确打开方式啊。
不过,如果你的时间很充足,当然是系统的看书、上课更好了,会有更加平缓的学习曲线。
这样 3 个月后我把基本的算法类型都刷过了,数据结构也都深入理解了,刚开始做的题目也差不多都忘了,那么开始第二阶段。
第二阶段:拓展思路
这一阶段我花了 1 个半月的时间,复习了第一阶段的题目,并做了 100 道新题。
平时工作日的时候,我会去复习第一阶段的题目,并且用英文把它讲出来,毕竟我要参加英文面试,如果是国内面试的话中文就好了,然后你就会发现,自己是不会说话的,不信你录音听一听。 周末时,我会限定时间去做新题,模拟考试或者面试的感觉,在有时间压力下去思考,否则给充足的时间大家都能做出来。
这一阶段我是记录在 Excel 里:
第二阶段做的差不多的时候,就把 Linkedin 设置为 “open to market“,就会有猎头找我了,那一旦拿到面试,就到了第三阶段。
第三阶段:面试
这一阶段的重点是找到面试的状态和感觉,并且快速写出代码。
那么我的方法是
Mock interview 参加 Leetcode contest
这一阶段的刷题顺序我会按公司分类来刷,Leetcode 上有 company tag,如果是国内的小伙伴可以参考这个 Github: https://github.com/afatcoder/LeetcodeTop
,列举了国内几大互联网公司常考的面试题,那么就会更有针对性的准备面试。
这一阶段又陆陆续续做了 100 题,同时面完了所有的面试,就收工啦。
最后呢,再送个大家 3 个很好用的 Github 资料:
按国内公司分类: https://github.com/afatcoder/LeetcodeTop
按照算法类型分类: https://github.com/wisdompeak/LeetCode
Leetcode 1-919 题的解析: https://github.com/grandyang/leetcode