LeetCode 刷题隔天忘怎么办?

忘了很正常。

「无忌,我教你的还记得多少?」「回太师傅,我只记得一大半」

「那,现在呢?」「已经剩下一小半了」

「那,现在呢?」「我已经把所有的全忘记了!」

「好,你可以上了…」

张教主的这个名场面也时刻发生在刷题中。想靠记住每道题的解法显然是不现实的,况且题目只会越刷越多。

刷一道算法题,求解的思考过程远比知道最终解法要重要。就好比数学/物理定理,你知道了会用是一种境界,能完整证明它们又是另一种境界。所以如果可能的话,尽量不要让自己陷入靠记忆解决问题的地步。

要怎么做呢?我提供一个以前同学的例子。他本科是工科,研究生转了CS专业,毕业后刷题3个月拿到了Facebook,Google,Amazon的全职offer。他刷题的方法就是做笔记,这是他3个月刷题过程中整理的笔记,将近900页,你们感受下(笔记链接点这里

他刷题的原则很简单,不要把“题目数量”作为刷题指标,而应该把问题拆解,拆成具体的问题模式和对应的解决方法。用图来表示的话大概像是这样:

每道算法题都有其构成的基本单位,比如有什么数据结构、用到了某某算法等。通过将问题拆分,做类比分析思考,自行做“聚类操作”,我们就能构建自己的算法知识体系。这个过程做笔记是最有效的。

比如很多问题都可以转化成“Tree”或者“Graph”,或者“递归”

  • 搜索问题基本是多叉树,有些问题就是以root为起点的“走迷宫”——DFS + Backtracking
  • 有些在搜索/子问题树里,要按特定顺序进行处理——在二叉树里,我们叫它pre-order / in-order / post-order遍历
  • 有些时候,树的结构与子问题重复性很高——于是有了记忆化搜索 / 动态规划

所以刷题实际上是不断抽象,越刷越少的过程。面试中遇到了所谓“新题”,很可能只是我们抽象总结得还不够。

很多题看过答案后,你以为自己懂了,其实并没懂。

就拿动态规划来说,刚开始刷的时候往往都摸不着头脑,看了答案之后恍然大悟,原来是这样,只要找到状态转移方程,之后就简单了。

然而答案一般直接告诉你了状态转移方程,却不会说明是如何找到状态转移方程的。这个思考过程在刷题中其实是欠缺的,下次遇到动规题还是很大可能不会。

回到刷题本身,不要寄太大希望于“速成”。一般要制定一个至少几个月的学习计划,根据自己当前的基础和水平做针对性训练。

针对算法面试,我也总结了面试常见知识点的考察频率和建议的刷题量。

在我主讲的《九章算法班》中,除了会讲如何刷题外,还会谈谈面试中正确沟通的技巧,培养coding style和bug free的能力。按照我的方法刷题,1个月就能搞定算法面试。

戳我即可报名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值