吴忠强:刷LeetCode的正确姿势!
写在前面
最近面试中做算法题,受了打击,和我之前准备的很不一样。这篇文章通过笔试实战经验复盘我在刷LeetCode的一些误区和今后对策,供大家参考备战秋招,下面开始 😉
刷LeetCode姿势很重要
刷题不能以数量来定质量。一般我们衡量刷Leetcode,都喜欢问刷多少道题目了?并且觉得刷的题目数量和能力成正比。
其实并不是,至少对于我不是。之前听好多大佬说200道LeetCode够用了,在第一次笔试之前,我LeetCode就刷到了200+,并且都是重温和复刷,还挺自信的。结果第一次阿里笔试,就瞬间把我积累的所有自信打击到0,很遗憾,非常惨。
仔细反思原因,这次的失败有很多方面,还不仅仅是刷题上的误区,总结的经验如下:
1. 目标误区
以数量定能力不可取,不是数量够多就行,要注重刷题的质量和转化问题的能力。在刷题中,我们要注重锻炼转化问题的能力以及应对各种题型的反应速度(代码编写能力)。
举几个判断的例子:是否能不加思考,就把二分、快速排序、堆排序、DFS和BFS、树的各种遍历、回溯等模板框架默写出来?见到一个新题目,能不能立即反应出考的是什么算法?能不能立即想到相应算法中有哪些经典解决思路?这才是我们需要在刷题的过程中练习的。大佬说的200道题目,应该是高质量、中高难度、能概括全貌、又练习了很多遍的题目。
不要盲目自信、贪多,用战术勤奋去掩盖战略懒惰,逼着自己做难题,逼着自己多思考,多总结,触类旁通,同时珍惜那种能够举一反三的题目。
2. 策略误区
不知道大家有没有遇见过?见到很难的题目,总是不自觉的就去背代码,而不愿意思考具体过程,半懂不懂的状态。尤其是二刷三刷某个题时,我经常是:先记代码,然后直接敲,遇到bug了,往往也不喜欢再思考,而是直接看看之前刷过的,“哦,原来这里出问题了”,恍然大悟, 提交通过,二刷完成。
呵呵, 现在我再回忆这个过程,自己是多么的天真,这样复刷,刷多少遍也没用,反而浪费了时间和好题目。因为这个过程中,我们明明已经知道了对这个题目没有掌握(遇到bug), 这时候,应该逼着自己重新考虑题目,如果真的考虑不明白了,再去看代码,之后再想。要珍惜复刷的时间和机会。
3. 思考误区
这个是针对题目本身来说的,刷题的时候,一定要真正弄懂题目,看后面题解的时候,也不要只看一种思路,如果有好几种好的思路也建议多看看,虽然真正面试或者笔试的时候,能写出一种就不错,但是多个思路有助于帮助我们去更好的理解题目本身。
没有思考转换的过程,刷题再好,面试也跪。因为公司的笔试题是不会有原题的,全是生活中的具体场景,需要我们自己去转换,如果刷题的时候没有真正理解题目,那仅仅是会了这样的一道题目而已,换成场景型,不一定转换出来。最简单的例子,就是斐波那契数列和爬楼梯, 可能斐波那契数列拿捏得死死的,一到爬楼梯不会爬了。
4. 环境误区
面试做笔试题的时候是ACM模式,也就是纯白板编程,自己写输入输出。这个是和平时LeetCode上的刷题有很大区别的。所以阿里那次笔试,我也吃了这个亏,不了解实际环境,一上来白板编程就懵逼了。其实一个小时两道题目,真正思考题目的时间很少,大部分时间都在熟悉编程环境,输入接收不好,那是真难受哇。所以笔试之前,一定提前熟悉环境,牛客上有真实的ACM编程模式,尽量去练练,不能一昧的只刷LeetCode。
另外,用IDE很重要,如果允许用,那尽量用。我经历了三次笔试,最后一次才悟到这个有多么重要。python的话,就建议pycharm,非常好使,更重要的是,有代码保存功能。我第三次美团笔试, 中途编程我的校园网挂了,导致刷新之后,我写好的代码全都没了,顶着重压又重写的代码,欲哭无泪,心态差点崩。
5. 时间控制误区
平时我在刷LeetCode时,是不太注重时间的,但是发现,这个是个坏习惯。真实笔试是计时的,就会出现即使这个题目我遇见过,知道是什么框架什么算法解,但写代码就是写不出来。反思原因,第一个是对于算法框架本身掌握的不够熟练, 第二个是平时并没有养成好的时间掌控习惯,所以在笔试的时候,大脑处在了一个偷懒的状态,不想思考和提炼。所以以后刷题,一定要计时刷题,中等以上难度,尽量40分钟以内, 简单题目20分钟以内。LeetCode上有个面试模拟,可以打开它,感受一下时间的流逝,这样会逼迫着大脑保持活跃和思考的状态。、
6. 真实模拟误区
这个也是我参加完第一次笔试悟到的,就是我们只悠哉悠哉的佛系刷题根本不行,得找机会来还原一下真实笔试的场景,感受一下刺激才行。否则,是真的没法战胜笔试的。真实情景模拟非常重要,这个一个是可以多参加笔试,不用怕打击的,打击时间长了就习惯了,并且真的发现,参加次数多了之后,恐惧会慢慢减少,虽然我目前只经历了三次,但我感觉到我现在并不会太慌了,尤其是做美团这次,断网之后我代码全部消失,这要是放到第一次的时候,我觉得我应该立马放弃走人,可是我当时异常冷静,愣是缓了缓,又重新写了一遍,当然最后也是AC了一点,可是心态在逐渐变好。
一定要让自己多把握一下真实模拟的机会,多参加笔试是最好的策略,不过这个毕竟有限,可不要放到秋招再去体验,那时候成本就高了。而我发现LeetCode的周赛,牛客上的模拟也是一个非常好的机会,可以去练习。
总结
由于目前参加的笔试体验有限,所以只发现了我刷题过程中这几个误区,也庆幸这是在找实习时发现的,如果是秋招,成本可就不一样了。
总结起来就是LeetCode还是多刷,但不要盲目,要多思考,把握时间,多总结反思,常复习,最后量变推质变吧。