☰
109天刷完LeetCode面试经典150:题单节奏、高频考点与真实踩坑复盘
2026/10/20 4:36:13 网站建设 项目流程

坐在这张书桌前的时间,算到今天刚好第109天。别人问起刷题这件事,最容易被低估的门槛其实不是题目难度,而是你还能不能在第100天的时候继续翻开同一份题单。我这个系列刷的很慢,LeetCode面试经典150,从数组的第一题开始,一路磕磕绊绊走到现在,期间改过计划、换过语言、也推翻过自己很多次“以为会了”的错觉。这篇文章想把这一路的题单认知、节奏安排、题型拆解和踩坑现场都整理一遍,给正在刷或者准备刷这份题单的人一些参考。

面试经典150的本质不是告诉你“150道题怎么解”,而是替你划出了面试里最高频的算法考点边界。题单覆盖数组、链表、二叉树、图、回溯、动态规划、贪心、二分等十几个大类,题目难度大致呈现出一个两头小中间大的分布:简单题大约三成,中等题占一半以上,困难题是一小撮但往往压轴出现。如果你目标是三个月内系统过一遍并达到可面试水平,这份题单的密度和方向都算得上精准。

这篇文章适合三类人:刚起步想选一份靠谱题单的、刷到一半被难度和遗忘反复折磨的,以及刷完一遍但总觉得讲不清楚思路、面试担心翻车的。我会尽量把每个阶段遇到的具体问题都写出来,不只是“我AC了”,而是AC之前我在想什么、错在哪、后来怎么改的。

1. 先看清“面试经典150”这本题单到底在考什么

1.1 题单的整体结构与难度分布

LeetCode面试经典150并不是150道随机题的堆叠,它更像一位经验丰富的面试官帮你圈定好的高频题库。我第一次打开题单列表时,第一反应是“这也太杂了”,但真正按分类刷下去之后才意识到,它的编排是刻意打散的,目的是让每个专题都贴着真实面试的出题逻辑走。

题单大体可以按考点密度分成几个梯队。数组、哈希表、双指针、滑动窗口、链表、二叉树这几类是绝对的主角,加起来大概占了60道左右,几乎每一场技术面试里都会至少碰到其中一类。矩阵、栈、队列、二分查找、堆、回溯、图论和并查集是中坚力量,加起来约50道,属于“中高频”区间,不一定每场都考,但大厂面试官很喜欢从里面挑一道作为第二题或第三题。最后是贪心、动态规划、多维DP和一些偏数学技巧的题目,约30道上下,难度梯度明显,通常在难点题或加面环节出现。

从难度占比看,简单题大概40道出头,中等题约80道,困难题不到30道。这个比例透露的信息很明确:面试经典150的目标不是让你去卷竞赛难度,而是把业务开发里真正用得上、面试里问得最多的算法思维练扎实。我实测下来,前面五十题刷起来会比较顺,中间几十题开始出现“看题解会了、自己写又卡住”的体验,到回溯和动态规划密集区时,进度会肉眼可见地慢下来,这太正常了,几乎所有刷这份题单的人都会在同一个地方减速。

1.2 为什么面试前刷它比刷几百道散题更高效

刷题这件事最怕的不是题目难,而是没有边界。今天刷一道股票买卖,明天刷一道图论拓扑排序,后天又来一道后缀表达式求值,表面上看刷了很多,实际上在面试官眼里你的算法知识树仍然是东一块西一块的状态。面试经典150的价值恰恰在于它给了你一个明确的范围和顺序感。

我自己之前也走过刷散题的弯路,今天觉得某道题有意思就刷一道,明天再看每日推荐又来一道,看起来每天都在做题,可当我想检验自己到底掌握了哪些考点时,却说不出个所以然。后来换到这份题单,节奏立刻清晰了很多。它每个分类下都有足够数量的题目让你形成肌肉记忆,比如双指针这个考点,从两数之和类问题到容器盛水再到接雨水,难度是平滑上升的,概念复用度很高。当你在三天内连续做同一类考点的题目时,那种“归纳总结”的感觉会自然涌现,这在刷散题时很难体验到。

另一个实际原因是从面试还原度来看,这套题单里的题目类型与面试中常出现的真实原题重合率极高。不是说面试官会直接出原题,而是这些题背后训练的思维方式——对子问题拆解、时间复杂度的取舍、边界条件的处理——正是面试中考察的核心能力。与其盲目追求刷题数量,不如把这一百五十道真正吃透、能讲明白,这是我刷到第109天最强烈的体会。

1.3 什么人适合直接开刷这份题单

面试经典150并不是零基础友好型题单,但也不是非得刷完几百道题才能碰的进阶题库。以我的体感,如果你已经能独立完成LeetCode上简单难度的数组或字符串题目,对时间复杂度和空间复杂度有基本概念,就可以直接开始。它比“按通过率热门的Top100”更适合系统打基础,因为那个榜单是为了流量设计的,而150这个题单是为了面试覆盖度设计的。

但如果你是从零开始连“双指针”这个词都陌生,我建议先花一到两周补一下基础数据结构概念,知道栈、队列、链表、二叉树、哈希表这些结构的特点和增删改查复杂度,再进入题单会顺利很多。另外,如果你正处于备战面试的时间窗口里,比如一个月后就要开始投递,那至少要把数组、哈希、链表、二叉树、双指针这几块刷透,动态规划和图论能做中等题即可。时间充裕的话则要完整过一轮,并把错题进行二刷三刷,这比追求“全部了解一点”靠谱得多。

2. 从第1天到第109天:一份可执行的刷题节奏方案

2.1 先定计划:109天到底该怎么分配

面试经典150一共150题,要在一百天出头的时间里刷完,平均每天大约是1.4题,看起来好像不难,但实际上当题目步入了回溯、动态规划、困难级别的数组题时,单题耗时可能从半小时直接飙到两小时以上。所以真正合理的计划不能按“150除以天数”来做,而是按考点密度和难度分布分阶段推进。

我把自己的109天大致分成了三个阶段。第一阶段是前30天,主攻数组、哈希表、双指针、滑动窗口、字符串,每天1至2题,目标是把编程手感找回来;第二阶段是中间40天,推进到链表、二叉树、矩阵、栈与队列、二分查找、堆,每天1到2题,这里开始出现中等难度的树和链表题,需要多花时间看题解和画递归过程图;第三阶段是最后39天,集中处理回溯、图论、贪心、动态规划和困难题,这个阶段每日一题可能都吃力,所以我会把一些关联度高的题目放在一起做,比如连续两天做不同背景下的“子集类”回溯题,形成对比记忆。

这个计划有几个设计原则值得单独说。第一,每天只设置一个“必须完成”的下限,也就是至少写一道题并写完题解笔记,如果状态好可以加码,但不允许出现连续两天不碰代码的情况;第二,周末适当加量,工作日保持稳定,周末两天各安排2至3题,用来追赶进度或者补之前落下的复盘;第三,每隔7天固定停下来复习本周错题,这个环节的重要性被绝大多数人忽略,但它恰恰是防止“刷了忘、忘了刷”的关键。

2.2 分类交替与专题深挖怎么搭配

我在刷题过程中踩过的一个坑是连续好几天只刷同一类题,比如连着四天全在做动态规划,到第五天看到“dp数组”几个字就条件反射地头疼,而且因为思维模式太单一,到后面几道题时大脑其实已经疲惫了,很难再吸收新知识。后来我调整成“专题为主、穿插为辅”的策略:每天的主任务仍然是当前专题的内容,但会在中间穿插一至两道已经做过的其他分类的题目作为热身。

举个例子,假设这一周主攻二叉树。我会在周一做二叉树的前中后序遍历对比题;周二先快速重写一道之前做过的双指针题找手感,然后再做一道二叉树的层序遍历;周三继续二叉树专题,但温习一道哈希表题目;周四做到二叉树最近公共祖先这类中等偏难题,可能会花掉很长时间;周五再做两题并记录对比。这种穿插不是浪费时间,反而能让你在接收新专题知识的同时,不给旧知识留出遗忘的空档。

另外我强烈建议入门阶段每次只开一个专题,不要上午刷树、晚上刷图、睡前又看两眼动态规划。深度学习需要注意力集中,专题式推进能在短时间内让大脑形成对该类题型的整体认知框架。等到一轮150题刷完之后,再按“薄弱点专题”进行第二轮穿插复习,那时候你才有能力同时处理多个专题的交叉调度。

2.3 随手记录的题解笔记比收藏好用一百倍

刷题刷到第60天左右,我发现了一个很残酷的事实:LeetCode收藏夹里躺着的题解,我当时觉得自己“完全看懂了”,但过了三周再回来看,跟看一道全新的题没有任何区别。从那时候开始我给自己定了规矩,每道题必须用自己的话写一篇“四要素”笔记:核心思路是什么、时间复杂度与空间复杂度是多少、写代码时最容易出错的地方在哪、如果面试官问优化我该怎么答。这个习惯直接把我二刷时的效率拉高了一倍不止。

笔记怎么记也是有讲究的。我用的是一张简单的表格,对于数组、双指针这类题,重点记录指针的移动条件和循环不变量;对于二叉树题目,重点记录递归函数的含义、终止条件、以及每一层递归需要返回什么信息;对于动态规划,重点记录状态定义和状态转移方程的推导过程,而不是把AC代码贴一遍。这样做的原因是面试时人不可能背下代码,但思路框架是可以反复调用的,而四要素笔记保存的正是这种框架化信息。

关于工具,我用的是最朴素的Markdown文件和本地文件夹同步,你也可以用在线笔记。重点不是工具多高级,而是笔记要有“对比感”。比如我做完动态规划里“打家劫舍”和“最长递增子序列”这两道题后,笔记里会专门写一段两者状态定义的不同。等到回头复习时,这种对比点比单独看十道题的代码都能加深记忆。

3. 高频考点深度拆解:从“看题懵”到“下笔准”

3.1 数组与哈希:最基础也最容易丢分

数组和哈希是面试经典150的开篇大项,题量占比不低,难度跨度也最大。简单题里像“两数之和”这种级别,核心考点是哈希表将查找从O(n)降为O(1);中等题则开始考验你对数组索引和边界条件的敏感度;困难题则会让你在“原地修改”“时间O(n)、空间O(1)”这类约束下一步步缩小方案选择空间。

以“除自身以外数组的乘积”为例,很多人第一次看到要求不能用除法时都会卡住。这个题的核心思路是先从左到右累乘前缀积,再从右到左累乘后缀积,最后把两轮结果相乘。这比你写出一个可以AC的代码更重要的是理解“前缀信息”和“后缀信息”这种预处理思想,因为它会被反复用到其他题里,比如后续的滑动窗口最大值和动态规划前缀和相关的题。

再比如“三数之和”,它考察的就不只是哈希了,而是排序加双指针的组合套路。这里有一个我亲身踩过并在笔记里高亮标记的坑:循环去重时必须在找到一组解后再移动指针去重,而不是在进入循环前直接跳过所有相同元素,否则会漏掉组内重复但合法的解。每次面试复盘时,这类边界和去重细节,都是面试官区分你确实熟练还是只会默写代码的分水岭。

3.2 双指针与滑动窗口:面试官最爱跟你在代码里抠边界

双指针和滑动窗口在面试中的出现频率高得吓人,面试官很愿意考这两类,因为它们的思路看起来很简单,但边界条件极其容易写错。尤其是滑动窗口,考验的是“什么条件下收缩窗口”和“在何时更新答案”这两个问题的理解是否透彻。

举个例子,LeetCode面试经典150里面的“无重复字符的最长子串”这道题,核心是维护一个不含重复字符的窗口,窗口右边每次都向前移动,当遇到重复字符时,把左指针跳到重复字符上一次出现位置的后一位。这里的关键细节是“跳到后一位”而不是“一步一步移动”,如果没想清楚,性能就会退化到接近暴力解法。面试时写出O(n)的时间复杂度并不难,难的是向面试官解释清楚“为什么直接跳过后一位也是正确的”。

滑动窗口的另一道经典题是“最小覆盖子串”,除了窗口收缩逻辑之外,还要求你用哈希表维护字符频次差,并判断当前窗口是否满足覆盖条件。我做这道题时调试了很久,最后发现问题是判断覆盖条件时用了遍历哈希表的方式,导致整体复杂度变成了O(n*字符集大小),虽然还是能过,但面试时很可能被追问。优化方向是维护一个计数器,记录“窗口里还缺少多少个字母”,这样判断就变成O(1)了。这一类细节你在自己单独刷题时不容易意识到,建议在笔记里把“可优化点”单独作为一节重点写。

3.3 链表与二叉树:递归与迭代的反复横跳

链表和二叉树是算法面试中绝对不能翻车的两个大类。链表题考的是指针操作和空间意识,面试官最爱看着你画图;二叉树题则几乎默认你能熟练写出递归,并能在追问时转化为迭代写法。

单说链表,面试经典150里“反转链表”“环形链表”“链表排序”都是高频面孔。“反转链表”用迭代法时必须掌握“三指针翻转法”,我给你说个实用技巧,每次移动时在心里默念“先保存后继,再翻转当前指向,然后移动前驱和当前指针”,这个流程能避免八成以上的空指针错误。很多人在纸上画图都会,一旦写代码就漏了保存后继这一步,因为人脑很容易把图上看起来理所当然的操作直接映射成代码,而忽略了中间需要额外的引用变量。

二叉树方面,递归三步法几乎可以应对大部分题目,即明确递归函数的语义是什么、找到递归的终止条件、写出当前层与子问题之间的组合关系。“二叉树的层序遍历”则是BFS的标准模板,配合队列使用,核心是要知道BFS模板有两个层次结构,一个是节点层、一个是当前层的节点集合。我第一次写层序遍历时兴致勃勃写了个DFS先序变体,结果发现根本没法把相同深度的节点自然归组,后来老老实实套用BFS模板,问题迎刃而解。递归思路学会后,别偷懒,至少要挑几道题练习改成栈迭代版本,因为面试官一旦追问“你能不用递归写吗”,现场临时想迭代版本通常会手忙脚乱。

3.4 动态规划:从“依葫芦画瓢”到“理解状态转移”

动态规划是面试经典150里让最多人心理破防的大类,这个现象太普遍了,因为动态规划不像链表题那样能靠画图解决,它的核心是抽象的状态定义和状态转移,而这恰恰是文字和代码都不容易直观表达的东西。

我自己的转折点发生在第80天左右,当时已经连续刷了近十道动态规划题,却仍然觉得每道题跟上一道没关系。后来我把刷题模式换成了对比归纳法,每次做完一道新题,先去笔记里对比之前已经做过的某道题,讲讲它们的状态定义哪里像、哪里不像、转移方程怎么从“不选当前项”和“选当前项”两个分支推出来的。比如“打家劫舍”的状态定义是“前i间房能偷到的最大金额”,转移方程是取“不偷第i间”和“偷第i间且加上前i-2间的结果”中的较大值;“最长递增子序列”则用“以第i个元素结尾的最长递增子序列长度”作为状态,转移时遍历所有在i前面的元素来找出能接上的最长序列。这两题看起来背景南辕北辙,但都是典型的由子问题到原问题的递推结构,对比着看一下子通透了很多。

这里再分享一个实际经验,动态规划题如果五分钟没思路,我建议直接看题解,不要死磕。看题解的过程并不是“作弊”,而是学习一套状态定义范式的过程。关键是看完后要合上题解,完整地重新推演一遍状态转移流程,再独立手写代码。看得懂和写得出来完全是两回事,后者才是面试需要的能力。这个规则同样适用于回溯题目。

4. 第109天的真实复盘:我中途踩过的坑和调整方案

4.1 刷了忘、忘了刷,怎么对抗遗忘曲线

我刷到第40天左右,最绝望的事情发生了,前面认认真真刷过的滑动窗口题目,回头再看时,居然连代码里的窗口收缩条件都想不起来。那段时间我一度怀疑自己是不是不适合刷题。后来复盘时发现原因很简单,我只是在“刷题”,而放弃了“复习”,大脑的遗忘速度远超想象,一道题做完两周不碰,知识点残留率大概只剩两成。

此后我强制给自己加了两个机制。第一个是标签化复习,每周末把所有本周做过的题按“完全会写、能讲清但写不快、完全想不起来”三类打标签,下周一首先把第三类作为热身题重写一遍,第二类每周随机抽两道保持手感;第二个是“讲题复述”机制,遇到想不起来的题,先不看题解,把之前自己写的四要素笔记打开,尝试仅凭“核心思路”和“最易错点”这两节内容把完整代码复现出来,这一步比单纯看代码效果大得多。如果你想长期保持状态直到面试结束,这两个机制建议从第一天就启用。

4.2 死磕一道题几小时,到底值不值得

刷题第60天前后,我陷入过一种很微妙的状态,一道中等题卡了快两个小时,心里燃烧着一种“我不能靠题解,我一定要自己想出来”的信念。现在回顾,这种执念对于面试场景是帮倒忙的。面试考察的是你能否在有限时间内找到一个可行的方案并清晰表述,它不要求你是首位提出解决方案的发明家。

我给自己定的新规则是:简单题15分钟没思路,中等题30分钟没思路,困难题45分钟没思路,统一切换到“看题解模式”。看题解不是目的,目的是快速理解一种新的解题范式,然后合上题解自己重新实现一遍。这种“元学习”方式的效率远高于孤独的死磕。如果你实在做不到只看一眼题解就收回去,也可以把题解拆成三段,先看“核心思想”一段,尝试自己补出后续,再看“关键实现细节”一段,最后对照完整代码。这样既保留了思维过程,又避免了把看题解变成抄代码。

4.3 会写但讲不清:从AC代码到面试表达的训练

刷到能稳定写出代码后,我才发现另一个隐蔽的短板,一道题我能AC但面试官根本听不懂我在讲什么。因为平时刷题只需要面对编辑器,完全不涉及表达能力,但面试是把思路讲给一个可能并不熟悉代码细节的人听,这需要你用结构化语言组织思路链。我到现在还记得第一次尝试把“三数之和”讲给别人听时的窘迫,我直接说“排序然后双指针收缩”,被追问“为什么双指针一定正确”时就哑了。

从第90天左右开始,我强制自己每天抽一道做过的题,用三分钟的时间把思路完整讲出来。流程是:先说清楚题目的输入和输出,再提出一个最简单的暴力法并分析复杂度,接着从暴力法的冗余项中引出优化思路,最后给代码和边界条件说明。这跟写代码是完全两种练习,但它对面试的加成极大,我后来甚至觉得“讲题训练”比多刷10道新题更有价值。

如果你觉得自己表达能力偏弱,一个可操作的练习是把你讲解的过程录下来,回放时重点听自己在“前后逻辑衔接”的地方有没有跳步。面试中“沉默的空白”往往让面试官怀疑你是否真的理解了题目,而“清晰的冗余说明”反而是加分项。不要嫌这个操作麻烦,它比自我感觉良好可靠得多。

4.4 进度焦虑怎么破:面对困难题和低AC率的心态管理

刷题到一个半月时,我遇到过非常严重的一次进度滑坡,一天只能完成一道题,还常常是在看题解后照抄完成的。那时的每日计划表里连续好几天都是红色的未完成标记,心态差到一打开题单就想关掉浏览器。后来我停下来断了一天,重新审视自己的计划,发现问题本质是我把“刷完150题”当成了最高目标,却忘了“掌握能力”才是最终目标。方向一旦错,每一天的完成率都会变成焦虑的燃料。

我开始允许自己有“只做一道简单难度题”的日子,只要完成了并留下一篇笔记就算合格。这个心理上的放松反而让刷题状态快速回升,因为大脑在低压力状态下更容易进入心流。另一个小技巧是把目标从“每天完成x题”改成“每天只问自己一个问题:今天我比昨天多彻底理解了哪一个算法概念?”因为很多题目本身跨度很大,强行用“题数”去衡量日进度非常失真,不如用“概念理解数量”去衡量,一天吃透一个状态转移套路,比一天囫囵吞下两题有价值得多。现在我到了第109天,很清楚一个道理:刷题是一场持续数月的长跑,进度表上偶尔的红色并不代表失败,它只是提醒你该调整节奏了。

5. 高频考点之外的进阶认知:经典题背后藏着的能力模型

5.1 为什么经典题反复出现还能区分候选人

面试经典150里很多题,面试官自己都解过几十上百遍,为什么他们仍然乐此不疲地问?因为同一道题可以被问到不同深度。一个只背过代码的人,在面对“如果输入数组有几百万个元素,你的方案还能跑吗”“内存受限怎么办”“我现在要你输出所有可行解而不是只输出一个,怎么改”这类追问时,会立刻露馅。

这也解释了一个现象,有些人刷了三遍经典150,面试仍然挂,不是题不够经典,而是他一直在“重复已知解法”,没有把题目背后通用的能力模型抽象出来。我觉得经典题背后有三个核心能力最值得刻意训练:复杂度意识、边界条件构建能力、以及用例子驱动思考的能力。复杂度意识要求你在写代码之前先预估方案是否可行,不要一上来就写出一个O(n^2)的算法还说“挺快的”;边界条件能力则靠平时积累,比如对空输入、单元素输入、数组越界、整数溢出这四类情况的敏感度;用例子驱动思考则是在面对题目时先用一个小规模输入做一次手工推演,把规律摸清了再写代码。

5.2 从“套模板”到“组合思维”的跃迁

刷题超过一百天后,会慢慢发现很多所谓“新题”的本质,是几个旧模板的组合。比如一道看似复杂的题目,可能先用哈希表统计频次,再借助单调栈找下一个更大元素,最后套用动态规划求最优值。这种组合思维在短期内不容易建立,需要前期的题量积累做支撑,这也是为什么很多建议说刷题至少要坚持一百天以上才能看到质变,因为质变的本质正是大量模板类知识点开始互相联通的时刻。

我在面试经典150的后期做题过程中,经常出现一种很奇妙的体验,看到一道图论题,突然联想到之前做过的一道并查集题,然后又想到可以用BFS分层遍历的思想来处理,最后得出结论用拓扑排序更合适。这种联想能力绝不是靠刷题量自然而来的,它建立在“每题都做归类笔记”和“时常把不同专题做对比”这两个习惯的基础上。如果你想要加速这个过程,建议每做完十道题,专门留出半小时做一次“跨题总结”,比如把所有“可以用双指针优化的题”列在一起,找出它们的共同特征。

5.3 代码风格和工程习惯:面试里容易被忽略的隐性得分点

刷题时很多人只关注算法正确性,忽略了代码风格,但面试官在有限时间内判断一个候选人是否“干净利落”时,代码的可读性和命名规范占了很大权重。变量名起什么,闭包内的引用如何处理,是否需要提前return清除无效分支,这些看起来跟算法无关的细节,在你写完代码后的review环节会被放大。

我自己在刷题时有过一次典型被面试官暗示“你这个代码有隐患”的经历。那道题我功能全过了,面试官看着我的代码说:“你的循环里这个临时变量如果在某次异常分支里没被赋值,会不会用到上一次循环残留的值呢?”那一刻我才意识到,面试不只是算法考试,还是对工程细节的抽查。从那以后我给自己定了两条代码规范:第一,所有临时变量在使用前都先初始化,哪怕初始化为0或空对象;第二,所有分支尽量提前return,减少深层嵌套,让主逻辑保持扁平。这两个小习惯单独看微不足道,但刷完整份150题后,你会发现自己的代码自然变得清晰很多,这也是经典题单训练的隐性价值。

6. 常见问题速查表:刷题路上高频卡点直接对表排查

具体表现根因分析排查与对策建议
一道中等题卡了两小时,连暴力解都想不到对题目类型缺少“思维触发点”,没识别出该用双指针或哈希等范式停止死磕,按时间阈值切到题解模式,先把范式记录下来,次日重写
代码逻辑看着对,一提交就数组越界或空指针边界条件未覆盖,空输入、单元素输入、索引在循环内被修改养成先处理边界再写主逻辑的习惯,把输入为空、长度为1、指针相邻作为默认测试用例
看题解完全能懂,合上就写不出来处于被动理解状态,代码未经过主动回忆与复现用“四要素笔记法”,先写核心思路再写代码,合上题解独立复现
刷了后面忘前面,进度焦虑严重缺少间隔复习机制,把“完成”当成“掌握”每周末三类标签化复习,每天只问“今天彻底理解了哪个概念”,允许减速
时间复杂度理论算得出来,但提交稳稳超时实际代码实现与理论复杂度不一致,可能存在隐式O(n^2)或高常数项检查循环嵌套、哈希表误用、字符串拼接方式、遍历整个集合去更新状态等常见优化点
能AC但从没被面试官认可过只强调答案,缺乏思路推导和复杂度分析展示按“暴力解法 -> 暴露瓶颈 -> 优化切入 -> 复杂度分析”四步讲题,每天练一道
动态规划题目识别不出来状态定义能力不足,没建立dp思想的问题识别模型连续一周只刷dp专题,每道题必写状态定义和转移方程推导过程,不跳步骤
二叉树递归能写,迭代遍历就迷茫对栈模拟递归的过程缺乏练习从“前序遍历”开始手画调用栈,再把模板推广到中序和后序,强制改成迭代实现
刷完150题还是觉得面试可能翻车缺的不是题量而是对典型考点的深度表达挑高频考点各选3题做“讲题训练”,把讲解录音回放修正,按面试标准自查

这条表其实是对我109天刷题过程中遇到的主要问题的一个压缩总结。你单独遇到其中某一条时可能不会有太大感觉,但连续几周积累下来就会变成“刷不下去”的全面爆发,所以我的建议是把这张表截图放在题单旁边,出现对应症状时及时对症处理,不要等问题大到想放弃的时候再回头找原因。

还有一个很多人不知道的小经验,如果你的LeetCode提交记录里写着“Time Limit Exceeded”,先别急着去看题解,试试把代码里的每一层循环都刻意加上注释说明它的“循环不变量”。这个动作极其神奇,当你不得不把“这个循环在干什么”写出来时,十个里面有七个能自己发现问题。因为代码能力弱的人写循环时往往心里只有一个模糊的意图,写注释的过程会迫使他精确定义意图,从而暴露出实现偏差。这个方法帮助我至少解决过十道以上的超时和越界问题,算是刷题过程中的独门技巧。

7. 关于这份题单,最后想说的几句大实话

如果让我把面试经典150这份题单用一个词评价,我会说“值得刷透”。但“刷透”不是指每道题都能默写,而是指当面试官给你一道题,你能在五分钟内完成题型识别、思路提出、复杂度预估,然后边写边解释地把代码完成。这种状态不是一蹴而就的,也正是这个原因,我觉得刷题计划里最核心的要素不是聪明,而是长期主义。

我在第109天的现在回看第一天,最感激的不是自己做了多少题,而是养成了一套可持续的刷题系统:按专题推进、用笔记沉淀、靠讲题检验、以复习对抗遗忘。哪怕面试结束之后,这套系统也完全可以平移去学习其他技术领域,因为它本质上是个“输入-加工-输出-回顾”的闭环。Interview这件事本身会过去,但把复杂问题拆解、用清晰的语言传达思路、在高压力下保持稳定输出,这些能力是会一直带走的。

这份题单刷完一遍之后如果时间还允许,我最推荐的方向是转过头来把困难题专题化地再刷一轮,尤其是几个经典困难模式:接雨水、编辑距离、正则表达式匹配、股票买卖系列、矩形中的最大面积。这些题真正的价值不在难度本身,而在于它们能把前面分散学到的基础范式拧成一股绳。我计划在150题全部AC之后,专门写一篇这些“困难题串讲”的整理,把每道题涉及两个以上范式的组合方式展开讲讲。

如果你正走在刷这份题单的路上,无论你是在第7天还是第67天,我只想说一句话:速度慢一点不可怕,中途调整计划也不丢人,真正重要的是每天保留一段纯粹思考的输入时间,让写代码和写笔记成为习惯的一部分。到了第100天以后,你会开始庆幸自己当初没有放弃。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询