☰
刷题75天复盘:LeetCode面试经典150题拆解与实战节奏
2026/10/17 3:34:23 网站建设 项目流程

刷题这回事,我一直有个观点:能坚持到第75天的人,拼的已经不是智力了,而是节奏感。今天这篇不是什么通关攻略,而是结合我在“day75(2.3)”这个时间节点上,复盘这套LeetCode面试经典150题单的拆解思路、刷题取舍和实操记录。如果你正好也在刷这份150题,或者正准备开始但担心半途而废,那这篇文章应该能给你一些具体能落地的东西,不只是“多刷几遍”这种正确的废话。

先说说这份题单的背景。LeetCode官方的面试经典150题,和之前的Hot 100不同,它更贴近面试现场的真实考察范围,既包含了高频算法题,也引入了一些偏工程向的题型,比如SQL、Shell这类纯面试会冷不丁考一下的东西。整个题单设计的逻辑是“按主题分类,难度渐进”,而不是简单堆砌题目。刷透这套题,应付大部分公司笔试和一面算法轮,压力不会太大。

我目前刷到第75天,整体进度大概在110题左右,属于“核心算法模块已通关,偏门题型正在补齐”的状态。这个过程里踩过不少坑,也总结出了一套自己的节奏,下面借用这篇复盘,把题目分组、时间分配、题目类型拆解和避坑经验都一并写出来。

1. 刷题前的准备:先认清这份题单的结构,再决定每天的发力点

真正开始刷之前,我建议先别急着打开第一题。花一个晚上,把150题的目录整体过一遍,按自己的舒适度打标签,这个动作至少能帮你节省两周的迷茫期。

1.1 150题的模块划分与考察权重

这道题单在官方后台实际上是有隐性的模块分组的,稍微整理一下可以分成四个大块:

  • 数据结构基础类:数组、字符串、哈希表、链表、栈与队列。这部分大概占40题左右,属于面试必考、也是刷题最先接触的模块。它们考察的是你对“存储结构”和“基本操作”的掌控力,代码量通常不大,但边界条件多。

  • 算法思维核心类:双指针、滑动窗口、二分查找、贪心、递归与回溯、动态规划。这部分量最大,大概在60到70题之间,也是最容易卡住人的地方。尤其是动态规划和回溯,属于“会者不难,难者不会”的分水岭。

  • 高级与专项类:堆、优先队列、字典树、并查集、图论与拓扑排序、设计题。这部分约20到30题。它们的特征是在面试中出现频率低于第一部分,但只要出现,基本都是压轴题,考察的是知识深度和临场迁移能力。

  • 非算法题型:SQL、Shell脚本。大概10到15题。这一块很多纯后端同学容易忽视的,但真正面试的时候,数据库和脚本相关的题目常常挂在第三四轮。

理解了这几个模块的权重,你就知道时间该怎么分配了。把百分之六十的精力压在前两块,百分之二十给第三块,剩下百分之二十留给SQL和Shell,这个配比在面试中收益是最稳的。

1.2 时间节奏的制定:从“日更打卡”到“阶段验收”

刷题这件事,最怕的不是题目难,而是缺少验收机制。我给自己定的节奏是“三轮滚动式”:

  • 第一轮(Day 1 - Day 40):按模块顺序刷,每天3道新题。不追求一遍AC,但追求看懂题解后能独立复现。
  • 第二轮(Day 41 - Day 70):按难度曲线刷,每天因人而异,2道新题加1道旧题复盘,重点是总结题型套路。
  • 第三轮(Day 71 - Day 120):随机混合刷,每天2道题,模拟真实笔试的随机出题状态。同时开始高频错题集中回顾。

你现在看到我卡在“day75(2.3)”,其实就是第二轮刚结束,开始进入第三轮的过渡期。这个“2.3”我自己的理解,它可以代表当天刷到了2月3号,也可以理解为第2轮第3阶段的第75天。重要的不是标记形式,而是标记背后的进度检查逻辑:我有没有按时完成该阶段的题量?每个模块的AC率是否稳定?

1.3 工具与环境的准备

工欲善其事,必先利其器,但刷题这个“器”不需要太花哨。我日常用的是本地编辑器加浏览器提交,没有特意去折腾各种插件。不过有几个点,建议你提前准备好:

  • 语言选型要专一:不要今天用Java写链表,明天用Python写DP,后天又切到Go。面试前,尽量锁定一门主语言。我自己主力用Go,数据结构题写起来顺手,并发相关的题还能展现语言特性。

  • 题解笔记要结构化:每道题建议记四要素:题意一句话、核心思路、复杂度、自己第一次写错的点。这样回头看的时候,30秒就能回忆起整道题,效率非常高。

  • 正确率统计习惯:用表格记录自己每道题提交了几次才AC。如果一道题超过4次提交还在错,说明思路有问题,应该马上停下看题解,而不是死磕。

2. 核心模块拆解:面试经典150里最容易拉分的四类题型

前面说完了整体布局,接下来深入到具体的题目类型。面试150不像竞赛题那样偏难怪,它考察的方式其实就是“用常见的算法,在规定复杂度内解决问题”。这里面有四类题型,几乎决定了你面试算法的成败,分别是:双指针与滑动窗口、动态规划、二叉树与图论、以及被很多人忽略的SQL与Shell。

2.1 双指针与滑动窗口:看似简单,实则满布边界陷阱

这类题在题单里的数量不少,从数组去重、链表环检测到字符串子串问题,到处都有它们的身影。但刷题刷到后期你会发现,双指针真正的难点往往不在思路,而在边界条件的处理。

举个很典型的例子,在排序数组中查找元素的第一个和最后一个位置。很多人第一次接触的时候都会用两个二分去找左右边界,看起来思路没错,但一写就容易把left和right的更新条件写反。我自己的习惯是,遇到二分变种题,先不急着写代码,在纸上把循环不变式写清楚,也就是明确“这个区间内还剩下哪些元素没有被排除”,然后再动手。这道题题单里还有多种变形,比如搜索旋转排序数组,也是一样的思路,只要把区间划分的条件理清,基本不会出错。

滑动窗口类的问题又是另一套逻辑。比如无重复字符的最长子串,这类题的解题模板很固定:右指针不断右移,左指针根据条件收缩。但很容易忽略一个点:窗口收缩的时候,要清掉的数据不止是字符本身,还有它在数据结构里的计数。我用哈希表做次数统计的时候,就吃过一次亏——右指针移动时添加了新字符,但没有把旧字符从表里真正删除,导致后面判断时认为窗口内还有重复元素,白白多了好几次提交。所以说这类题刷一遍是不够的,至少三遍,确保代码模板烂熟于心,才能在面试时闭着眼睛写出来。

2.2 动态规划:150题里真正的“拦路虎”

说动态规划是150题里最劝退的模块,应该没人反驳。它不像双指针那样有固定模板,每道题的状态定义都可能完全不一样,因此需要大量积累套路,才能在考场中快速抽象出子问题。

以题单里的经典DP题举例,爬楼梯和打家劫舍属于入门级,但别因为它们简单就跳过。这两题背后的本质是“一维递推”,理解了fib结构之后,才能看懂后面跳跃游戏这类“贪心+DP”混合题。真正拉开差距的是二维DP,比如不同路径、最小路径和,以及编辑距离这类字符串DP,它们会同时考验几个能力:状态数组的定义、初始化边界、递推顺序,以及空间优化(从二维压到一维滚动数组)。我在刷二维DP的时候,习惯先把dp[i][j]的物理含义用一句话写在注释里,一旦发现推导不下去,回去检查的就是这个定义,而不是公式本身。

还有一类是背包问题。虽然题单里的背包题不多,但完全背包、0-1背包这两种模型的代码接近,区别只在内外层循环的方向上。面试的时候如果时间不够,优先掌握0-1背包即可。我记得自己刷到完全背包的时候,一度对“正序更新”和“倒序更新”的区别很困惑,后来用一个生活化类比才彻底理解:0-1背包每件物品只能用一次,所以更新状态时必须倒序,防止“一件物品被重复使用”;而完全背包允许无限用,所以正序遍历,相当于每个物品可以叠加。想通这一点之后,背包题的代码就只是默写了。

2.3 二叉树与图论:必须掌握“由递归到迭代”的切换能力

二叉树相关的题目在面试里占比极高,从遍历、最近公共祖先、序列化到二叉搜索树,都是高频考点。这部分的复习核心,我把它总结为**“三种遍历吃透,剩下的都是变形”**。

前中后序遍历看起来简单,但你要能实现递归版、迭代版、甚至Morris遍历版,才算真正掌握。这里提供一个训练思路:先把递归实现写到肌肉记忆,然后针对中序遍历再练迭代法,用显式栈模拟递归过程。图论题稍有不同,常见的场景有岛屿数量、课程表、腐烂的橘子等。它们本质上都是“图里做遍历”,用DFS还是BFS取决于问题问的是连通性还是最短步数。我一般这样记:连通性优先DFS,最短路径优先BFS,另外图上带权的要想到Dijkstra与堆的配合,这一块题单里出现的不多,但作为思维拓展值得掌握。

2.4 SQL与Shell:容易被忽略但性价比极高的“送分题”

那些主攻算法的同学,常常会忽略SQL和Shell题目。但真正到面委会问“你数据库怎么样”的时候,这些题就是送分题。

题单里的SQL题目主要集中在聚合函数、分组统计、窗口函数和表连接上。窗口函数是重点,像ROW_NUMBER()、RANK()和DENSE_RANK()的区别,面试中几乎必考。这里有个实用经验:遇到“分组TopN”“连续出现N次”“最大连续天数”这类问题,优先想窗口函数,它比传统的分组聚合加子查询要简洁得多。Shell题目集中在文本处理和文件解析场景,高频考点是grep、awk、sed三件套。对应试来说,你只需要能把文件读取、字段拆分、排序输出这几个动作串联起来,就能拿下一道中等难度的Shell题。

3. 实操过程记录:我的day75是如何安排的

今天的主题是“day75(2.3)”,重点在“2.3”——也就是第2轮第3阶段。这个阶段的核心任务是“混合刷题+错题重做+限时训练”。我以今天的具体安排为例,给你一个可复制的实战模板。

3.1 当天题单怎样组合,才能兼顾新题和复习

以我这天的安排为例,共刷了4道题,这个量在后期不算大,但重在组合合理:

  1. 一道二叉树的题目,用来锻炼递归转向迭代的思维;

  2. 一道滑动窗口的题目,用来巩固模板的同时,找回“边界控制”的感觉;

  3. 一道二维动态规划,保持DP的手感,防止遗忘状态定义方式;

  4. 一道错题重做,这道题来自第42天,当时提交了6次才过,今天重新验证是否能在15分钟内独立AC。

上午的整块时间用来做前两题,中午碎片时间看第三题的题解思路,下午在本地编辑器完整写下第三题的代码,并跑测试用例。晚上统一复盘,在用表格整理当天情况后,记录一道新错题。你看到第75天还能稳定输出4道题,其实靠的是前74天养成的规律,不是当天临时起意。

3.2 现场编码中的三个细节问题

今天做题的时候,树上的一道递归转迭代的题目,又把我的一个老毛病逼出来了:递归函数里的返回值处理。我常犯的错是在回溯时忘记把状态恢复,导致子树遍历结束后影响兄弟节点。二叉树的路径和这类题目,尤其容易触发这个问题。我的解决办法是分层思考:先不考虑回溯,把每一层该做什么写清楚,再把“回溯即恢复”作为一个必写步骤,单独用一行注释标注出来。

第二个问题是滑动窗口模板的初始化。窗口问题中,左右指针的初始值直接决定了循环的条件是while (right < n)还是while (left <= right)。这两者的选择看似无关紧要,但容易在后续计算窗口大小时犯迷糊。我的习惯是统一使用左闭右开区间,[left, right),这样窗口长度永远是right - left,不需要额外加一减一。

第三个坑是二维DP的空间优化。从二维压到一维的时候,要注意内层循环的遍历顺序。求最大最小值的题目,内层一般要倒序遍历;求方案数的题目,内层往往是正序。这个细节如果记混了,代码在样例上能跑通,一换数据就出错,属于典型的“思路对但代码错”的情况。

3.3 每日复盘表怎样设计才不流于形式

很多人做复盘就是记一下“今天做了哪几题,AC了没有”,这种复盘意义不大。我自己的复盘表包含这几列:题目名、模块类型、提交次数、时间复杂度是否达标、卡住的环节(思路/代码/边界)、是否需要记录进入错题本、下次回顾日期。这样一天下来,哪类问题最多、哪个模块还不稳,都一目了然。我目前的卡壳环节统计里,“边界条件没想清”占了绝大多数,这说明问题不在算法思路,而在解题前的边界梳理。后续的复习重点自然就倾斜了。

复盘表的“下次回顾日期”也很有用,它设置了短期记忆的召回点,比如3天后、7天后、15天后。每次回顾只需要重新在编辑器中写一遍代码,不用完整跑样例,写的过程中就能检验是否还记得思路。

4. 常见问题与实战避坑:这些弯路,我替你先走过了

刷题打卡到第75天,中间踩的坑足够凑一篇两千字的问答。这里挑几个高频出现的问题,按场景分类说清楚。

4.1 “一上来就刷难题”导致信心崩塌怎么办

初学者最容易犯的错误,就是心气很高,打开题单直接挑一道中等偏上的题做,结果半小时没思路,一小时看题解还是似懂非懂。这种挫败感积累几天,很容易直接放弃。早期刷题的正确顺序应该是:先挑题型标签里的“数组”“字符串”“哈希表”这类基础模块下手,把简单题刷出量来,靠“快速AC”建立正反馈。等基础模块有了手感,再过渡到“双指针”“滑动窗口”,一步步增加难度。面试经典150这套题单的设计本来就是有梯度的,按顺序刷就是最优路径。

4.2 一道题刷到一半卡住,该不该继续死磕

我的经验是:20分钟没思路,立刻看题解,不算丢人。刷题是学习过程,不是比赛现场。看题解的时候不要只盯着代码,看完自己关掉题解,在编辑器中独立写一遍,这一步才是真正的学习环节。如果写完还是不理解,再回来看题解的思路部分,而不是直接复制。死磕只会消耗时间,而“看懂题解后能默写”这个动作,才是把别人的思路内化成自己能力的关键。

4.3 刷过的题过一周就忘了,算白刷吗

遗忘是非常正常的事情,遗忘曲线决定了你一定会忘。刷题本质上就是在和遗忘对抗,它靠的是间隔重复。每道题刷完,只是完成了“输入”和“编码”,如果没有“检索”环节,记忆留存率会非常低。所以一定要建立错题本或回顾清单。我在第40天前后,把刷过的题重新过了一遍,发现大概有30%的题已经写不出来了,当时确实很沮丧。但关键不是沮丧,而是依靠回顾清单找回这些题,每找回一道,记忆的牢固程度就会上一个台阶。这也是为什么三个月以上的刷题周期里,“复盘”比“刷新题”更重要的原因。

4.4 怎么看题解都看懂了一做就废

出现这种情况,通常是因为直接看了别人的完整解法,而没有经历“自己思考”的环节。我的做法是把题解拆成三个层次:先看思路,不看代码;思路理解后,自己尝试写代码;代码卡住再看具体某一段,而不是全部。很多高赞题解写得很漂亮,但那是讲解者消化后的产物,你跳过了消化过程,自然做不出来。解决办法也很简单:看完题解后,给自己出一道同类型的变种题,马上测验自己是否真的理解。这种“以教代学”的方式,比单纯重复刷题高效得多。

4.5 临近面试还是刷不完怎么办

这种情况其实很常见,毕竟时间有限,题单永远刷不完。面试前,我建议放弃“刷完全部”的执念,转而采取“高频优先”策略。把题单里标记为高频的题目过一遍,或者挑几类最常考的主题重点刷,比如数组、二叉树、动态规划。虽然可能达不到“全覆盖”,但在面试现场能覆盖大多数常见考点。剩下的部分,可以按题型粗略过一遍,见一下题目长什么样,不至于完全陌生即可。

5. 坚持下来的动力,以及对这份题单的复盘思考

写了这么多,最后还是想聊点务虚的东西。刷题坚持到第75天,支撑我的动力早就不是“我要进某家公司”这种宏大的目标了,而是每天在打卡表格上画一个勾的微小满足感。你会发现,当刷题变成一种类似“每天读书半小时”的习惯之后,它带来的反而不是焦虑,而是一种稳定的掌控感。

这套面试经典150题,整体设计偏向“面试够用,绝不超纲”。它不像竞赛题那样需要你掌握玄妙的数学变形,也不像某些公司题库那样偏门,它的考察面覆盖了绝大多数面试场景。对于准备面试的人来说,这是一份性价比很高的练习材料,前提是用正确的方法去刷它。

我个人这段时期的收获,不光是那些AC记录和模板代码,更多是养成了把难题拆解成最小可执行步骤的习惯。这个习惯,放到工作里写业务代码、排查线上问题,同样受用。等你刷到后半程,看到一道题时不再条件反射地打开编辑器,而是先在脑子里过一遍数据结构、算法复杂度、边界条件,那说明这套题单你算是真正刷透了。

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

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

立即咨询