几年前,一道LeetCode中等难度的题能让我卡到怀疑人生。二叉树看得我眼晕,动态规划像黑魔法——每次坐定练习,盯20分钟,放弃,看答案,"哦原来如此",一周后原题重现,大脑空白。
时间花了,轮子空转。真正改变的不是努力程度,而是学习结构。
第一阶段:为什么"看懂答案"是最大陷阱
我当时的循环很典型:做题→不会→看答案→"懂了"→下一题。这种路径依赖让大脑误把"理解"当成"掌握",就像看别人游泳一百遍,下水照样沉。
神经科学研究早就指出,被动接收信息只能激活浅层记忆编码。真正形成技能需要提取练习(retrieval practice)——也就是闭卷、限时、独立解题。我后来强制自己:任何题目至少憋30分钟才允许看提示,且看完必须24小时内重做。
痛苦,但有效。第一次完整独立解出动态规划题时,那种踏实感和看答案的虚假满足完全不同。
第二阶段:资源筛选比资源收集重要10倍
网上DSA教程多到能淹死人,我试过十几个平台,最后留下的只有三个。
NeetCode 150(免费)是我的主骨架。它不是题海战术,而是按类别组织的精选清单:数组、链表、树、图……每类从易到难排列,且附带视频讲解。关键是它的"盲刷"模式——隐藏题目标签,逼你自己判断该用哪种算法。面试时没人告诉你"这是一道拓扑排序题",这个训练救了我很多次。
《算法导论》(Introduction to Algorithms)当字典用。不是从头到尾读,而是遇到瓶颈时查特定章节。比如并查集(union-find)想不通,翻第21章看形式化定义和正确性证明。数学语言枯燥,但能根治"似懂非懂"。
LeetCode周赛当压力测试。每周六早上90分钟4道题,真实模拟面试的时间压迫感。我前三个月周赛只能做出1道,半年后稳定在3道,这个进度直接对应面试能力的质变。
其他资源?Sean Prasad的LeetCode模式清单、Back To Back SWE的YouTube频道、偶尔用AlgoMonster做针对性训练。清单短,执行才长。
第三阶段:建立"题型直觉"而非背诵代码
我见过有人刷500题却挂面试,也有人200题进大厂。差距在是否形成了模式识别能力。
我的方法是"三遍法则":第一遍独立做,卡壳也硬想;第二遍看最优解,理解为什么自己没想到;第三遍一周后重做,直到能10分钟内写出bug-free代码。同时维护一个电子笔记,记录每道题的"触发信号"——比如"看到最短路径+无权重图→BFS""看到重叠子问题→DP"。
三个月后,我看新题时大脑会自动分类:这题长得像之前哪类?核心障碍是什么?这种直觉让面试中的陌生题目也变得可解。
从"能做题"到"能过面试"的最后一公里
算法能力和面试表现是两件事。我曾在电话面试中解出难题却因沟通混乱被拒——面试官没跟上我的思路,以为我在瞎写。
后来每次练习都出声讲解,像对方坐在对面:先确认理解题意,再说思路框架,再写代码边写边解释,最后主动分析复杂度。Pramp和Interviewing.io上的免费模拟面试帮我暴露了很多盲区,比如我习惯先写再改,但面试官想看到先规划再动手的条理。
最终这套方法让我通过了多家顶级科技公司的面试。但比offer更重要的是,DSA从折磨变成了乐趣——解出一道好题像破译密码,那种快感是真实的。
作者Soma最后放了个链接,说全文免费可读。他现在的状态是:9千多LinkedIn关注,6千多Medium读者,主业自由职业者。从"中等题做不出"到教别人系统学习,这条路他走了几年。
你现在卡在哪一阶段?是轮子空转的阶段,还是已经找到结构、正在爬坡?
热门跟贴