刷题方案
一句话:先用《代码随想录》的固定套路把模板刻进肌肉(每章只刷 2/3),再用 Hot100 做高频验收(Hard 只留 6 道),全程只用一套思路——这是投入最少、手撕最稳的路线。
本页讲怎么刷(顺序 / 刷哪些 / 跳哪些 / 刷几遍);套路本身的原理见算法总览,按套路查题见算法题索引,按热度查题见高频题目索引。
总量:一阶段 94 题 + 二阶段 50 道新题(其中 43 题在一阶段刷过,直接进二刷)= 全程 144 题,覆盖 Hot100 的 100/100。
一、这套方案的取舍
为什么先随想录,不直接冲 Hot100
Hot100 是题目热度榜,不是教材——它按”用户喜爱度”排序,同一道题网上有几十种解法,新手边刷边收集”奇技淫巧”,越刷越懵,考场上第一反应是”这题有个巧妙解法我想不起来了”,而不是”这题属于哪一类”。
随想录是教材:同类题统一固定解法,二叉树全用递归三部曲,回溯全用 for + 递归 + 撤销,背包全用两层循环。刷完你脑子里是十来个能默写的模板,不是一百个孤立的题目。
顺序不能反:先有模板,Hot100 才是”套模板的验收”;没有模板,Hot100 就是”一百道互不相干的难题”。
为什么每章只刷 2/3
面试手撕的取材范围比你想的窄得多:链表反转、二叉树遍历、双指针、滑动窗口、背包、DFS 灌水——反复考的就这些。随想录每章后半段的难题、偏题、冷门变种(欧拉路径、解数独、单调递增的数字、最小生成树……)面试根本不出,刷它们的时间拿去把前 2/3 二刷三刷,收益高一个数量级。
本页每章都标了「跳过」和跳过原因,照着跳就行,不用自己判断。
为什么不练思考、直接看答案
这个阶段的目标不是”练出思考能力”,是快速建立模式识别。硬啃一道没见过的 DP 题两小时,学到的是”这一道题”;看懂标准解法再默写一遍,学到的是”这一类题”。
思考能力是二刷之后自然长出来的——当你见过 90 道题的标准解法,第 91 道题的思路会自己冒出来。一刷别硬啃,卡住 5 分钟就看答案。
这套方案不适合谁
说清楚边界,免得走错路:
- 算法岗 / 竞赛 / 大厂 SP 加面:考察深度远超 Hot100,本方案只是起点
- Google/Meta 这类外企:偏爱现场推导和 Follow-up 变形,“背模板”会被追问穿
- 只剩一周就面试:直接从高频题目索引 Top 40 往下刷,本方案的一阶段来不及
对国内大厂后端社招/校招的手撕环节,这套方案够用且性价比最高。
二、第一阶段:筑基速通(94 题)
单题怎么刷(25 分钟一道)
| 步骤 | 时长 | 做什么 |
|---|---|---|
| 读题 | 3 min | 只确认输入输出和边界,不想解法 |
| 看解 | 7 min | 直接看题解的「思路」+「代码」,看懂为止 |
| 默写 | 10 min | 关掉题解,从零敲一遍,敲不出来就再看一眼再关 |
| 验证 | 3 min | 提交 / 手动跑一个例子;错了看「易错点」 |
| 收口 | 2 min | 用一句话写下”这题的标志特征 + 用哪个模板”,记在自己的错题本 |
一刷的唯一验收标准是”能默写”,不是”能想出来”。 想不出来很正常——你现在是在装弹药,不是在打仗。
数组:三个最基础的模板
必刷 4 题
- 704 二分查找 —— 左闭右闭模板,后面所有二分题的地基
- 27 移除元素 —— 快慢指针原地覆盖,分清”读指针 / 写指针”
- 977 有序数组的平方 —— 对撞指针从两端取大值,倒着填结果
- 209 长度最小的子数组 —— 滑动窗口”右扩左缩”的原型
跳过
- 59 螺旋矩阵 II —— 纯模拟题,二阶段的 54 螺旋矩阵 已覆盖同一套路
- 卡码网自有题(区间和 / 开发商购买土地)—— 不是 LeetCode 题,本库也不收
本章模板(后面反复出现,务必默写到条件反射)
- 左闭右闭二分:
while (l <= r),收缩用mid ± 1 - 快慢指针原地覆盖:慢指针指向下一个要写的位置
- 滑动窗口:右指针扩、条件满足后左指针缩
链表:dummy 头节点解决一切边界问题
必刷 6 题
- 203 移除链表元素 —— dummy 头节点消灭”删的是头节点”这个特判
- 206 反转链表 —— 三指针
pre/cur/next;全场最高频手撕题,迭代和递归两版都要能闭眼写 - 24 两两交换链表结点 —— dummy + 一次操作三个指针,先画图再动手
- 19 删除倒数第N个结点 —— 快指针先走 n 步的固定套路
- 142 环形链表II —— 快慢指针找环,入环点的推导面试会让你证
- 160 相交链表 —— 双指针走完自己再走对方,消除长度差
跳过
- 707 设计链表 —— 工程量大、面试不考;想练手可选做
本章模板
- 虚拟头节点
dummy:一切”删头/插头”边界问题的通解 - 三指针反转:
pre - cur - next - 快慢指针:找中点、判环、找倒数第 k 个
哈希表:把暴力的第二层循环换成查表
必刷 6 题
- 242 有效的字母异位词 —— 26 长度数组当哈希,比 HashMap 快
- 349 两个数组的交集 —— Set 去重
- 1 两数之和 —— HashMap 存”见过的值 → 下标”,一趟遍历
- 15 三数之和 —— 排序 + 对撞指针,三处去重是全场最易错点
- 18 四数之和 —— 15 外面再套一层,注意剪枝和 int 溢出
- 202 快乐数 —— 用 Set 判环(本质就是链表找环)
跳过
- 1002 查找常用字符、383 赎金信 —— 都是 242 的同型题
- 454 四数相加 II —— 15/18 已覆盖”多数之和”的核心
本章模板
- 只含小写字母 → 26 长度数组当哈希
- 「找一对满足关系的元素」→
HashMap存”见过的值 → 下标” - 多数之和用排序 + 双指针,不是哈希(15/18),去重要卡三个位置
字符串:只保留两道,KMP 不用手撕
必刷 2 题
- 344 反转字符串 —— 对撞指针的最简形态
- 151 反转字符串中的单词 —— 整体反转再逐词反转,外加原地去多余空格
跳过
- 541 反转字符串 II —— 344 加个步长规则
- 28 找出字符串中第一个匹配项的下标 / 459 重复的子字符串 —— KMP。面试几乎不会让你手撕 next 数组,知道有这个算法、复杂度 O(m+n) 即可,题解留着当资料
本章模板
- 整体反转 → 局部反转(151 的核心手法)
- 原地双指针去除多余空格
双指针:复习章,不新增题目
随想录这一章是把前面数组、字符串、链表里的双指针题重新串一遍。不要重新刷一遍,只做一件事:下面这 7 题每题花 2 分钟回忆模板骨架,忘了的当场重敲。
这是全程第一次”回炉”,别跳过——遗忘就发生在这个时间点。
栈与队列:模板短,性价比最高的一章
必刷 6 题
- 232 用栈实现队列 —— 双栈摊还 O(1),要能讲清摊还分析
- 20 有效的括号 —— 栈做”就近匹配”的原型
- 1047 删除字符串中的所有相邻重复项 —— 栈做”就近消除”
- 150 逆波兰表达式求值 —— 栈求后缀表达式
- 239 滑动窗口最大值 —— 单调队列。Hard 但 ★★★★★,必刷
- 347 前 K 个高频元素 —— 小顶堆求 Top K(是小顶堆不是大顶堆)
跳过
- 225 用队列实现栈 —— 232 的镜像,会一个就行
本章模板
- 栈 = “就近匹配 / 就近消除”
- 单调队列:队头永远是当前窗口最大值
- Top K:求前 K 大用小顶堆(堆顶是这 K 个里最小的,方便淘汰)
二叉树:全场最大的一章,砍掉 BST 增删改
必刷 16 题
遍历骨架:
- 102 二叉树的层序遍历 —— BFS 队列 +
size控制层,这一题能变出七八道 - 226 翻转二叉树 —— 递归三部曲最简形态
- 101 对称二叉树 —— 同步递归比较左右子树
- 104 二叉树的最大深度 —— 后序求高度
- 111 二叉树的最小深度 —— 单侧空子树不算叶子,本章最常错的一题
递归返回值设计:
- 110 平衡二叉树 —— 用
-1表示不平衡,提前剪枝 - 257 二叉树的所有路径 —— 第一次出现”回溯撤销”
- 112 路径总和 —— 递归带累减的目标值
- 236 二叉树的最近公共祖先 —— 后序返回值设计的巅峰,必考
BST 性质:
- 98 验证二叉搜索树 —— 中序递增 / 上下界传参两种写法
- 235 二叉搜索树的最近公共祖先 —— 利用有序性,比 236 简单,对照着记
- 538 把二叉搜索树转换为累加树 —— 反中序(右 → 中 → 左)
- 700 二叉搜索树中的搜索 —— BST 递归入门,2 分钟
构造:
- 108 将有序数组转换为二叉搜索树 —— 二分递归建树
- 105 从前序与中序遍历构造二叉树 —— 切割区间的边界最容易写错
- 617 合并二叉树 —— 同步递归两棵树
随想录用的是 106(中序+后序建树),这里换成 105(前序+中序)——同一套路,但 105 在 Hot100 里,二阶段还要用。
跳过 10 题
- 222 完全二叉树节点个数 —— 考的是位运算优化,偏
- 404 左叶子之和、513 找树左下角的值、654 最大二叉树 —— 遍历套路已被必刷题覆盖
- 530 BST 最小绝对差、501 BST 众数 —— 中序性质已被 98/538 覆盖
- 701 BST 插入、450 BST 删除、669 修剪 BST —— 同一套”递归返回值重接子树”的写法,想体会只做 450 一道,其余是重复劳动
本章模板(全书模板密度最高的一章,四个全要默写)
- 递归三部曲:确定参数与返回值 → 确定终止条件 → 确定单层逻辑
- 层序遍历 BFS:队列 +
int size = queue.size()控制每层 - 递归返回值设计:靠”子树返回什么”避免全局变量(110/236)
- BST 中序即升序:98/538/230 全靠这条性质
回溯:一个模板通吃十道题
必刷 10 题
组合型(用 startIndex):
- 77 组合 —— 模板 +
startIndex的原型 - 216 组合总和 III —— 77 加上和值剪枝
- 17 电话号码的字母组合 —— 多个集合之间取组合,不需要 startIndex
- 39 组合总和 —— 元素可重复取:递归传
i而不是i+1 - 40 组合总和 II —— 元素有重复但不可重取:排序 + 同层去重
- 131 分割回文串 —— 把”切割”映射成组合问题
子集型(收集每个节点):
排列型(用 used[]):
跳过 5 题
- 93 复原 IP 地址 —— 边界条件琐碎,套路已被 131 覆盖
- 491 递增子序列 —— 去重方式特殊(不能排序),与 40/90 的套路不通用
- 332 重新安排行程 —— 欧拉路径,冷门
- 51 N 皇后、37 解数独 —— Hard,二阶段也跳
本章模板(只有一个,但要吃透三处变化):
void backtracking(路径, 选择列表) {
if (终止条件) { 收集结果; return; }
for (选择 : 选择列表) { // ← 变化 1:startIndex 控制"组合"还是"排列"
if (剪枝条件) continue; // ← 变化 2:used[] 或 i > start 控制去重
做选择;
backtracking(...);
撤销选择; // ← 变化 3:撤销一定要和"做选择"对称
}
}
组合用 startIndex、排列用 used[]、去重必须先排序——这三句话记住,十道题都是它。
贪心:全书最该砍的一章
必刷 9 题(就是能复用的三条线)
入门:
股票 / 跳跃:
- 122 买卖股票的最佳时机 II —— 所有上涨区间全吃掉
- 55 跳跃游戏 —— 维护”最远可达位置”
- 45 跳跃游戏 II —— 按”层”跳,本质是 BFS
区间问题:
- 435 无重叠区间 —— 按右端点排序,区间贪心模板
- 763 划分字母区间 —— 记录每个字母最后出现的位置
- 56 合并区间 —— 按左端点排序,和 435 对照着记
跳过 8 题
- 1005 K 次取反、860 柠檬水找零 —— 简单但套路不复用
- 134 加油站、135 分发糖果、406 根据身高重建队列 —— 一题一巧思,学会一道对下一道毫无帮助
- 452 用最少箭引爆气球 —— 435 同型
- 738 单调递增的数字 —— 冷门
- 968 监控二叉树 —— 贪心 + 树形 DP,难且冷门
为什么砍这么狠:贪心是全书唯一不成体系的一章——每道题一个独立的”巧思”,学会 134 对做 135 毫无帮助。只有区间、股票、跳跃三条线能复用,必刷的 9 题就是这三条线,其余投入产出比全书最低。
本章模板
- 区间题先排序:按右端点排 = 求最多不重叠数量;按左端点排 = 合并区间
- 用贪心答题时,必须能说出”为什么局部最优不会错过全局最优”,说不出就改用 DP
动态规划:唯一要刷到 3/4 的一章
DP 是手撕里唯一”想不出来就完全写不出”的类型,必须靠题量堆出手感。26 题分五组,按组刷、按组默写。
入门 5 题 —— 搞清递推公式是怎么来的
- 509 斐波那契数 —— DP 五部曲的最简载体
- 70 爬楼梯 —— 和 509 同式,重点是理解”为什么是它”
- 746 使用最小花费爬楼梯 —— 初始化的坑:从 0 还是从 1 起跳
- 62 不同路径 —— 二维 DP 入门
- 63 不同路径 II —— 加障碍,初始化要中断
背包 8 题 —— DP 的核心,务必吃透
- 416 分割等和子集 —— 01 背包判定型,容量倒序遍历
- 494 目标和 —— 转成”求子集和为定值的方案数”
- 1049 最后一块石头的重量 II —— 转成尽量均分的 01 背包
- 518 零钱兑换 II —— 完全背包求组合数:外层物品、内层容量
- 377 组合总和 IV —— 求排列数:外层容量、内层物品。和 518 对照,这是背包最大的坑
- 322 零钱兑换 —— 完全背包求最值,初始化为
amount+1 - 279 完全平方数 —— 322 换一套物品集合
- 139 单词拆分 —— 字符串上的完全背包
打家劫舍 3 题 —— 同一模型的三种形态
- 198 打家劫舍 —— 线性 DP 状态定义的典范
- 213 打家劫舍 II —— 环形:拆成两段线性各跑一次
- 337 打家劫舍 III —— 树形 DP,返回长度为 2 的数组
股票 3 题 —— 状态机 DP
- 121 买卖股票的最佳时机 —— 只能买一次:维护历史最低价
- 123 买卖股票的最佳时机 III —— 最多两次:五个状态
- 188 买卖股票的最佳时机 IV —— 最多 k 次:把 123 的状态数组化
子序列 7 题 —— 二维 DP 的主战场
- 300 最长递增子序列 —— O(n²) 必会,能提一句贪心 + 二分的 O(n log n)
- 718 最长重复子数组 —— 连续:不匹配就归零
- 1143 最长公共子序列 —— 不连续:不匹配可以继承。和 718 对照记
- 392 判断子序列 —— 1143 的特例,也能双指针秒杀
- 72 编辑距离 —— 二维 DP 的终点站,三个状态来源
- 647 回文子串 —— 区间 DP / 中心扩展两种解法
- 516 最长回文子序列 —— 区间 DP,遍历顺序要倒着来
跳过 9 题
- 343 整数拆分、96 不同的二叉搜索树 —— 数学味重,不是 DP 的典型形态
- 474 一和零 —— 二维背包,超出面试范围
- 674 最长连续递增序列、1035 不相交的线 —— 分别是 718 和 1143 的换皮题
- 115 不同的子序列、583 两个字符串的删除操作 —— 72 的弱化版
- 309 含冷冻期、714 含手续费 —— 股票状态机的加料版,121/123/188 已够用
本章模板(DP 五部曲,每道题都按这个顺序说一遍):
dp[i]的定义(说不清定义就一定写不对递推式)- 递推公式
- 初始化(
dp[0]是什么,为什么) - 遍历顺序(01 背包倒序、完全背包正序;求组合数先物品后容量、求排列数先容量后物品——这是背包最大的坑)
- 举例推导
dp数组(写不出来就在纸上画表)
单调栈:三道题够了
必刷 3 题
- 739 每日温度 —— 单调递减栈的原型,栈里存下标
- 496 下一个更大元素 I —— 739 加一张映射表
- 42 接雨水 —— 单调栈 / 双指针两种解法。Hard 但 ★★★★★,必刷
跳过
- 503 下一个更大元素 II —— 496 加个环形,取模即可
- 84 柱状图中最大的矩形 —— Hard,二阶段也跳
本章模板
- 栈里存下标,不是值
- 求”下一个更大” → 单调递减栈;求”下一个更小” → 单调递增栈
- 出栈的那一刻就是答案产生的时刻——这句话记住,单调栈就不会写错
图论:只保留 DFS 灌水和拓扑排序
随想录图论章用的是卡码网题号(不是 LeetCode),这里映射成等价的 LeetCode 题。
必刷 6 题
DFS 灌水:
- 200 岛屿数量 —— 灌水法的原型
- 695 岛屿的最大面积 —— 灌水带返回值
- 130 被围绕的区域 —— 反向思维:从边界开始灌水
拓扑排序与并查集:
- 207 课程表 —— 拓扑排序判环(入度表 + 队列)
- 210 课程表 II —— 207 加输出顺序,同一份代码
- 547 省份数量 —— 并查集入门(也能 DFS)
选做
- 417 太平洋大西洋水流问题 —— 双向灌水
- 684 冗余连接 —— 并查集判环
跳过整片
- 最短路全家桶(Dijkstra / Bellman-Ford / SPFA / Floyd / A*)
- 最小生成树(Prim / Kruskal)
面试手撕不考这两片——它们属于笔试和竞赛,问到也只问概念,不会让你现场写。
本章模板
- DFS 灌水:四方向数组
{{0,1},{0,-1},{1,0},{-1,0}}+visited - BFS:队列逐层扩散
- 拓扑排序:入度表 + 队列
- 并查集三件套:
find(路径压缩)+union+connected
三、第二阶段:Hot100 验收(50 道新题)
一阶段刷完,Hot100 的 100 道题里已经有 43 道是你刷过的。这一阶段真正要做的只有 50 道新题,剩下 7 道 Hard 直接跳。
三条规则
- Hard 只做白名单里的 6 道,其余 7 道跳过(下面列了名单和依据)
- 只用一阶段的模板——看到新题先问”这属于哪个套路”,不去搜”更优雅的解法”。考场上犹豫 10 秒就凉,一套思路通吃比十种解法可靠
- 至少二刷。一刷是”能默写”,二刷是”看题 60 秒内说出思路”——只有二刷之后才谈得上手撕
新题 47 道
哈希 / 数组 / 技巧(10):
- 49 字母异位词分组 —— 排序后的字符串当 key
- 128 最长连续序列 —— Set + 只从序列头开始扩,O(n)
- 189 轮转数组 —— 三次反转
- 238 除自身以外数组的乘积 —— 前缀积 × 后缀积
- 136 只出现一次的数字 —— 异或自反
- 169 多数元素 —— 摩尔投票
- 75 颜色分类 —— 三路快排的 partition
- 31 下一个排列 —— 从后找升序对 → 交换 → 反转后缀
- 287 寻找重复数 —— 把数组看成链表,快慢指针找环
- 118 杨辉三角 —— 送分题
双指针 / 滑动窗口(5):
- 283 移动零 —— 快慢指针原地覆盖
- 11 盛最多水的容器 —— 对撞指针,移动短板
- 3 无重复字符的最长子串 —— 滑动窗口,★★★★★
- 438 找到字符串中所有字母异位词 —— 定长窗口 + 计数数组
- 560 和为 K 的子数组 —— 前缀和 + 哈希计数,不是滑动窗口(有负数)
矩阵(4):
- 73 矩阵置零 —— 用首行首列当标记位
- 54 螺旋矩阵 —— 四边界收缩模拟
- 48 旋转图像 —— 转置 + 左右翻转
- 240 搜索二维矩阵 II —— 从右上角开始走 Z 字
二分查找(5):
- 35 搜索插入位置 —— 退出时
l就是插入位置 - 74 搜索二维矩阵 —— 二维拍平成一维
- 34 在排序数组中查找元素的第一个和最后一个位置 —— 左右边界各二分一次
- 33 搜索旋转排序数组 —— 先判哪半有序,★★★★★
- 153 寻找旋转排序数组中的最小值 —— 和 33 同一套判断
链表(7):
- 234 回文链表 —— 找中点 + 反转后半段
- 141 环形链表 —— 142 的简化版
- 21 合并两个有序链表 —— dummy + 双指针归并
- 2 两数相加 —— 进位处理,注意最后一次进位
- 138 复制带随机指针的链表 —— 哈希映射 / 原地穿插两种
- 148 排序链表 —— 归并排序,要求 O(1) 空间时用自底向上
- 146 LRU缓存 —— 全场最高频设计题,哈希 + 双向链表要能一次写对
栈与堆(3):
- 155 最小栈 —— 辅助栈同步存最小值
- 394 字符串解码 —— 双栈处理嵌套
- 215 数组中的第 K 个最大元素 —— 堆 / 快速选择,★★★★★
二叉树(6):
- 94 二叉树的中序遍历 —— 递归 + 栈模拟两版
- 543 二叉树的直径 —— 后序 + 全局变量
- 230 二叉搜索树中第 K 小的元素 —— 中序第 k 个
- 199 二叉树的右视图 —— 层序取每层最后一个
- 114 二叉树展开为链表 —— 前序 / 反向后序原地改指针
- 437 路径总和III —— 前缀和 + 哈希,树上版的 560
图论 / 字典树(2):
- 994 腐烂的橘子 —— 多源 BFS
- 208 实现 Trie —— 前缀树基本操作
回溯(2):
动态规划(3):
- 152 乘积最大子数组 —— 同时维护最大和最小(负负得正)
- 64 最小路径和 —— 62 的加权版
- 5 最长回文子串 —— 中心扩展 / 区间 DP
Hard:6 道必刷 + 7 道跳过
筛选依据不是”我觉得”,是本库题解元数据行的频次标注:Hot100 里的 13 道 Hard,凡是标 ★★★★★(几乎必考) 的一律保留——它们在高频题目索引 Top 40 里排得很靠前,跳掉等于放弃高频分。
必刷 6 道(★★★★★)
一阶段已刷,这里只做二刷:
二阶段新做:
- 76 最小覆盖子串 —— 滑动窗口的天花板,
need/window双计数表 - 4 寻找两个正序数组的中位数 —— 二分割点,写不出来至少要能说归并法 O(m+n)
- 25 K个一组翻转链表 —— 206 的分组版,字节最爱考
跳过 7 道(★★★★ 及以下)
- 23 合并K个排序链表 —— 优先队列 / 分治归并
- 32 最长有效括号 —— DP / 栈,状态定义很绕
- 41 缺失的第一个正数 —— 原地哈希,技巧性强
- 51 N 皇后 —— 回溯,代码量大
- 84 柱状图中最大矩形 —— 单调栈进阶
- 124 二叉树中的最大路径和 —— 后序返回值 + 负数截断
- 295 数据流的中位数 —— 对顶堆
跳过 ≠ 不知道。这 7 道读一遍题解、知道用什么套路就行(各 5 分钟),不用默写、不用二刷。真被问到 Hard 且完全没头绪,主动说出暴力解 + 复杂度、再说”优化方向应该是 XX”,比沉默强得多。
复习 43 道(一阶段已刷)
这批不重看题解,直接按二刷标准过:看题 → 60 秒说出套路和骨架 → 说不出来的才回去看。
数组 / 哈希(2):
链表(5):
栈与队列(3):
二叉树(8):
- 98 验证二叉搜索树
- 101 对称二叉树
- 102 二叉树的层序遍历
- 104 二叉树的最大深度
- 105 从前序与中序遍历构造二叉树
- 108 将有序数组转换为二叉搜索树
- 226 翻转二叉树
- 236 二叉树的最近公共祖先
回溯(5):
贪心(5):
动态规划(11):
- 62 不同路径
- 70 爬楼梯
- 72 编辑距离
- 121 买卖股票的最佳时机
- 139 单词拆分
- 198 打家劫舍
- 279 完全平方数
- 300 最长递增子序列
- 322 零钱兑换
- 416 分割等和子集
- 1143 最长公共子序列
单调栈 / 图论(4):
四、二刷与手撕自检
二刷的通过标准
一刷和二刷的验收标准完全不同,别用一刷的标准糊弄自己:
| 一刷 | 二刷 | |
|---|---|---|
| 允许看题解 | ✅ 直接看 | ❌ 完全不看 |
| 通过标准 | 能照着默写出来 | 60 秒内口述”哪个套路 + 模板骨架 + 复杂度” |
| 单题耗时 | 25 分钟 | 5 分钟(说得出就过,说不出才动手写) |
| 做不出来 | 正常,再看一遍 | 记进错题本,三刷重点 |
二刷不是”再做一遍所有题”,是快速筛出还没内化的题。说得出的直接过,说不出的才值得花时间——通常 100 题里只有 20~30 题需要真正重做。
白板手撕自检清单
面试的手撕环境比 LeetCode 苛刻得多:没有 IDE、不能运行、没有测试用例、还要边写边讲。用这份清单模拟:
- 不开 IDE:记事本 / 纸上写,没有语法高亮和自动补全
- 不能运行:写完自己用一个例子在纸上走一遍
- 边写边讲:写之前先口述思路,写完主动说时间/空间复杂度
- 主动问边界:数组可能为空吗?有重复元素吗?数值范围会溢出吗?——这一步是加分项,很多人直接开写就扣分了
- 写完自己找 bug:先检查边界(空输入、单元素、越界),再说”我觉得没问题了”
- 15 分钟内写完:手撕通常只给 15~25 分钟,超时等于没做出来
错题本怎么记(一行就够)
不要抄题目、不要抄代码,只记你当时卡在哪:
LC 322 零钱兑换 | 完全背包 | 卡点:遍历顺序搞反了,求组合数要"先物品后容量"
LC 236 LCA | 递归返回值 | 卡点:忘了"左右都非空说明当前就是 LCA"
三刷时只看错题本,不重刷全部。
五、进度表
两档节奏自选。每天的题量按”新题”算,回炉复习不计入。
4 周速通(每天 3~4 小时)
| 周 | 阶段 | 内容 | 题量 |
|---|---|---|---|
| 第 1 周 | 一阶段 | 数组 + 链表 + 哈希 + 字符串 + 双指针复习 + 栈与队列 | 24 |
| 第 2 周 | 一阶段 | 二叉树 + 回溯 | 26 |
| 第 3 周 | 一阶段 | 贪心 + 动态规划 + 单调栈 + 图论 | 44 |
| 第 4 周 | 二阶段 | Hot100 新题 50 道 + 43 道复习二刷 | 50 + 43 |
第 3 周是硬骨头(DP 26 题挤在一周),如果扛不住就顺延到第 4 周,别砍 DP。
8 周稳扎(每天 1.5~2 小时,在职推荐)
| 周 | 阶段 | 内容 | 题量 |
|---|---|---|---|
| 第 1 周 | 一阶段 | 数组 4 + 链表 6 + 哈希 6 | 16 |
| 第 2 周 | 一阶段 | 字符串 2 + 双指针复习 + 栈与队列 6 | 8 |
| 第 3 周 | 一阶段 | 二叉树 16 | 16 |
| 第 4 周 | 一阶段 | 回溯 10 + 贪心 9 | 19 |
| 第 5 周 | 一阶段 | 动态规划 26(入门 5 + 背包 8 + 打家劫舍 3) | 16 |
| 第 6 周 | 一阶段 | 动态规划(股票 3 + 子序列 7)+ 单调栈 3 + 图论 6 | 19 |
| 第 7 周 | 二阶段 | Hot100 新题 50 道 | 50 |
| 第 8 周 | 二阶段 | 全量二刷(93 题,只筛不做)+ 错题三刷 | — |
第 2 周题量低是故意的——留时间给第 1 周的回炉。一阶段每周开头花 20 分钟回忆上周的模板,这比多刷 5 道题有用。
进度自检
每个阶段结束时问自己三个问题,答不上就别往下走:
- 一阶段结束:能不能凭空默写出「递归三部曲」「回溯框架」「背包五部曲」「二分左闭右闭」四个模板?
- 二阶段一刷结束:随机翻开 Hot100 里的 10 道题,能说出套路的有几道?(少于 7 道就再刷一遍,别急着二刷)
- 二刷结束:从高频题目索引 Top 40 里随机挑 3 道白板手撕,15 分钟内能写完几道?
常见追问
-
跳过的那些题以后要补吗? 面试前不用。等你已经能稳定通过手撕环节,想再提升一层再回来补——那时候你会发现跳过的题大多是”已经会的套路换个皮”。真正值得回头的只有两类:Hard 白名单外但你面的公司特别爱考的(查高频题目索引的公司标注),以及自己错题本里反复卡的。
-
只刷 2/3 会不会漏掉考点? 会漏,但漏的是低频考点。本方案的 144 题覆盖了 Hot100 全部 100 道题、高频题目索引 Top 40 里的绝大多数。剩下的风险用另一种方式对冲更划算:与其多刷 50 道冷门题,不如把已刷的题二刷到”闭眼默写”——面试挂在”见过但写不利索”上的人,远多于挂在”没见过”上的人。
-
Hard 真的一道都不看吗? 不是。本方案保留 6 道 ★★★★★ 的 Hard 必刷,另外 7 道要”读题解知套路”(各 5 分钟),只是不默写、不二刷。完全不碰 Hard 的风险在于:真遇到时连暴力解都说不出,直接冷场。
-
多久能刷完? 4 周(每天 3
4 小时)或 8 周(每天 1.52 小时)。别信”三天速通”——模板的形成需要间隔重复,压缩到三天的结果是第四天全忘。 -
一刷就直接看答案,会不会养成依赖? 一刷会,二刷不会。二刷的规则是完全不看题解,那一步会把依赖强行掰回来。真正危险的是相反的情况:一刷硬啃两小时不看答案,一周才刷 10 道题,最后因为进度焦虑而放弃。
-
用什么语言刷? 面试用什么就用什么,本库题解是 Java。别为了”代码短”临时换 Python——手撕时面试官会追问语言细节(比如 Java 的
HashMap扩容、Integer缓存),用不熟的语言容易在追问里翻车。 -
刷题和背八股怎么分配时间? 手撕通常只占面试 20~30 分钟、一到两道题,八股占的时间更长。但手撕是硬门槛——写不出来后面聊得再好也难过。建议:一阶段期间算法优先(每天 70% 时间),二阶段开始转成算法/八股各半,从知识点索引同步推进。