高级农民
- 积分
- 4220
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-11-17
- 最后登录
- 1970-1-1
|
额,个人感觉啊,首先要明确的是,熟练度远比题量重要得多得多得多得多。
先问自己几个问题:1. 数据结构真的搞懂了吗?比如说堆,链表,等等等等;2.算法搞懂了吗,二分就不用说了,那些复杂一些的DFS之类的;BFS, 扫描线,并查集,窗口指针,对撞指针等等等等,时间复杂度,空间复杂度,
再同意楼上的观点,如果一道题目拿到手了,你能判断出大概是什么样子的level,这就成功了一部分了。
我的经验是,一道题目拿到手了,我先根据感觉去想想怎么做,这个确实是大量做题和归纳总结锻炼出来的,如果想不出来,那就把自己会的那些鬼东西都往里面套一下,看看是否有用,再不会,那也没办法了。
比如说,给你个题,如果不是很明显的label让你知道用什么算法,那你可以考虑下,会不会是用stack,或者是queue和BFS结合,难道是递归,难道是指针,等等,如果还不会,那就跪吧,去看答案去。做到这一步,没人会怪你的,大家都是普罗众生,很正常。
我做题的时候也觉得很恶心,刷过的题,过几天就忘了,模模糊糊记得怎么做,可是呢,就是那些细节会把自己打败。举个例子啊,LC里面那道序列化和反序列化二叉树的题,我用BFS, DFS都做了,不下十遍,之前每次做都感觉差一点,很难一次AC。后来发现原因主要有两个,第一,并不是真正懂得了里面的技巧,因为你看会答案,和你想到答案理解答案,根本是两个概念;看答案的时候觉得,哇靠,无比正确,无比牛逼,所以你抄答案的时候,或者说你趁着刚看完还热乎的时候去写,会觉得很正常,可是呢,这真的还不是你脑子里的东西,所以,你下次写的时候其实又不会了;你在做的时候就应该多想想为什么这样写,多想想一些细节,看看自己是否能够复述出来,如果自己是面试官,自己能否接受自己的解释;再比如说双指针里面的那个蓄水问题,你真能解释得了为什么哪边小移动哪边指针吗,链表有环,找环的入口问题,你会证明吗?为啥快慢指针就是一个走一步,另一个走两步呢,如果另一个走三步,四步,答案会是什么呢?第二个,没办法,就是不熟练,很多东西是奇思妙想,时间长了就忘了;这个我的方法就是归类,然后跟类似以前背GRE一样的经验,一定时间内多次反复强化记忆,归类也是一个很好的方法。
比如说,楼主做过二分吧,知道九章的二分模板吧,哪些题目是rotated的呢,边界到底是怎样的呢;值的二分有哪些呢,wood cuts, paper copy, 大猩猩吃香蕉,轮船集装箱,小男孩吃巧克力等等,这些的区别联系又是哪些呢,这都是一类问题;还有一些要多总结的,链表里面,快慢指针找中点的技巧,对于不同的题目中,到底该怎么处理呢;记忆化搜索和DP基本上都可以互换,如果这道题目不用DP,只用记忆化搜索,你会写吗?由下至上,由上至下,你能搞定吗?这些总结整理的工作,比刷题本身更难,这也是你会在刷题这件事情中脱颖而出的原因。否则,你以为人家公司傻逼啊,给个几百K的package,给一个只会背答案的人。
把题目总结出来,放在excel表格里面,打印出来,零散时间就可以看看。可能只有200道题目,只要题目的title和难易程度,就OK了,看着题目,脑子里最少要想出来,这是个啥,这是咋做的,用的啥知识点,旁边再放点自己的note,需要注意点啥。跟背单词一样,时不时拿出来过一遍,慢慢地对自己要求是一次AC,或者只允许小的BUG存在,前几遍会很痛苦,嗯,还是跟背单词一样。第一遍可能就要一个月,第二遍可能要三周,第三遍可能是两周,后面是一周。我整理了320题,大概3天可以过一遍,不是每道题都要写出来,但是挑出来自己不太熟练的,每天写个四五道最少吧,最少要做到,不用看答案,也能做出来,也许会有一点bug或者是磕磕碰碰的,但是,应该能自己debug完成。
最后一句话就是,DP真恶心,这个是我每次onsite之前都会再一次全文背诵的表格,哈哈。
不要只停留在把题做出来,AC了就满足的阶段,放弃刷题题量之后,应该争取的是对这些题目的深刻理解和熟练。 |
|