算法刷题千道,面试就忘怎么办?

hakunamatata11 16天前 12

忘了很正常。

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

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

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

「好,你可以上了…」

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

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

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

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

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

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

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

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

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

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

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

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

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

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

免费试听时间

2020/9/20 (下周日)上午 9:30

报名方式

戳我即可报名

最新回复 (0)
  • 游客
    2
返回