刷题方案

一句话:先用《代码随想录》的固定套路把模板刻进肌肉(每章只刷 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 题

跳过

  • 59 螺旋矩阵 II —— 纯模拟题,二阶段的 54 螺旋矩阵 已覆盖同一套路
  • 卡码网自有题(区间和 / 开发商购买土地)—— 不是 LeetCode 题,本库也不收

本章模板(后面反复出现,务必默写到条件反射)

  • 左闭右闭二分:while (l <= r),收缩用 mid ± 1
  • 快慢指针原地覆盖:慢指针指向下一个要写的位置
  • 滑动窗口:右指针扩、条件满足后左指针缩

链表:dummy 头节点解决一切边界问题

必刷 6 题

跳过

本章模板

  • 虚拟头节点 dummy:一切”删头/插头”边界问题的通解
  • 三指针反转:pre - cur - next
  • 快慢指针:找中点、判环、找倒数第 k 个

哈希表:把暴力的第二层循环换成查表

必刷 6 题

跳过

  • 1002 查找常用字符、383 赎金信 —— 都是 242 的同型题
  • 454 四数相加 II —— 15/18 已覆盖”多数之和”的核心

本章模板

  • 只含小写字母 → 26 长度数组当哈希
  • 「找一对满足关系的元素」→ HashMap 存”见过的值 → 下标”
  • 多数之和用排序 + 双指针,不是哈希(15/18),去重要卡三个位置

字符串:只保留两道,KMP 不用手撕

必刷 2 题

跳过

本章模板

  • 整体反转 → 局部反转(151 的核心手法)
  • 原地双指针去除多余空格

双指针:复习章,不新增题目

随想录这一章是把前面数组、字符串、链表里的双指针题重新串一遍。不要重新刷一遍,只做一件事:下面这 7 题每题花 2 分钟回忆模板骨架,忘了的当场重敲。

这是全程第一次”回炉”,别跳过——遗忘就发生在这个时间点。

栈与队列:模板短,性价比最高的一章

必刷 6 题

跳过

本章模板

  • 栈 = “就近匹配 / 就近消除”
  • 单调队列:队头永远是当前窗口最大值
  • Top K:求前 K 大用小顶堆(堆顶是这 K 个里最小的,方便淘汰)

二叉树:全场最大的一章,砍掉 BST 增删改

必刷 16 题

遍历骨架:

递归返回值设计:

BST 性质:

构造:

随想录用的是 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):

子集型(收集每个节点):

排列型(用 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 题(就是能复用的三条线)

入门:

股票 / 跳跃:

区间问题:

跳过 8 题

为什么砍这么狠:贪心是全书唯一不成体系的一章——每道题一个独立的”巧思”,学会 134 对做 135 毫无帮助。只有区间、股票、跳跃三条线能复用,必刷的 9 题就是这三条线,其余投入产出比全书最低。

本章模板

  • 区间题先排序:按右端点排 = 求最多不重叠数量;按左端点排 = 合并区间
  • 用贪心答题时,必须能说出”为什么局部最优不会错过全局最优”,说不出就改用 DP

动态规划:唯一要刷到 3/4 的一章

DP 是手撕里唯一”想不出来就完全写不出”的类型,必须靠题量堆出手感。26 题分五组,按组刷、按组默写。

入门 5 题 —— 搞清递推公式是怎么来的

背包 8 题 —— DP 的核心,务必吃透

打家劫舍 3 题 —— 同一模型的三种形态

股票 3 题 —— 状态机 DP

子序列 7 题 —— 二维 DP 的主战场

跳过 9 题

本章模板(DP 五部曲,每道题都按这个顺序说一遍):

  1. dp[i]定义(说不清定义就一定写不对递推式)
  2. 递推公式
  3. 初始化dp[0] 是什么,为什么)
  4. 遍历顺序(01 背包倒序、完全背包正序;求组合数先物品后容量、求排列数先容量后物品——这是背包最大的坑
  5. 举例推导 dp 数组(写不出来就在纸上画表)

单调栈:三道题够了

必刷 3 题

跳过

本章模板

  • 栈里存下标,不是值
  • 求”下一个更大” → 单调递减栈;求”下一个更小” → 单调递增
  • 出栈的那一刻就是答案产生的时刻——这句话记住,单调栈就不会写错

图论:只保留 DFS 灌水和拓扑排序

随想录图论章用的是卡码网题号(不是 LeetCode),这里映射成等价的 LeetCode 题。

必刷 6 题

DFS 灌水:

拓扑排序与并查集:

选做

跳过整片

  • 最短路全家桶(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 直接跳。

三条规则

  1. Hard 只做白名单里的 6 道,其余 7 道跳过(下面列了名单和依据)
  2. 只用一阶段的模板——看到新题先问”这属于哪个套路”,不去搜”更优雅的解法”。考场上犹豫 10 秒就凉,一套思路通吃比十种解法可靠
  3. 至少二刷。一刷是”能默写”,二刷是”看题 60 秒内说出思路”——只有二刷之后才谈得上手撕

新题 47 道

哈希 / 数组 / 技巧(10):

双指针 / 滑动窗口(5):

矩阵(4):

二分查找(5):

链表(7):

栈与堆(3):

二叉树(6):

图论 / 字典树(2):

回溯(2):

动态规划(3):

Hard:6 道必刷 + 7 道跳过

筛选依据不是”我觉得”,是本库题解元数据行的频次标注:Hot100 里的 13 道 Hard,凡是标 ★★★★★(几乎必考) 的一律保留——它们在高频题目索引 Top 40 里排得很靠前,跳掉等于放弃高频分。

必刷 6 道(★★★★★)

一阶段已刷,这里只做二刷:

二阶段新做:

跳过 7 道(★★★★ 及以下)

跳过 ≠ 不知道。这 7 道读一遍题解、知道用什么套路就行(各 5 分钟),不用默写、不用二刷。真被问到 Hard 且完全没头绪,主动说出暴力解 + 复杂度、再说”优化方向应该是 XX”,比沉默强得多。

复习 43 道(一阶段已刷)

这批不重看题解,直接按二刷标准过:看题 → 60 秒说出套路和骨架 → 说不出来的才回去看。

数组 / 哈希(2):

链表(5):

栈与队列(3):

二叉树(8):

回溯(5):

贪心(5):

动态规划(11):

单调栈 / 图论(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 + 哈希 616
第 2 周一阶段字符串 2 + 双指针复习 + 栈与队列 68
第 3 周一阶段二叉树 1616
第 4 周一阶段回溯 10 + 贪心 919
第 5 周一阶段动态规划 26(入门 5 + 背包 8 + 打家劫舍 3)16
第 6 周一阶段动态规划(股票 3 + 子序列 7)+ 单调栈 3 + 图论 619
第 7 周二阶段Hot100 新题 50 道50
第 8 周二阶段全量二刷(93 题,只筛不做)+ 错题三刷

第 2 周题量低是故意的——留时间给第 1 周的回炉。一阶段每周开头花 20 分钟回忆上周的模板,这比多刷 5 道题有用。

进度自检

每个阶段结束时问自己三个问题,答不上就别往下走:

  1. 一阶段结束:能不能凭空默写出「递归三部曲」「回溯框架」「背包五部曲」「二分左闭右闭」四个模板?
  2. 二阶段一刷结束:随机翻开 Hot100 里的 10 道题,能说出套路的有几道?(少于 7 道就再刷一遍,别急着二刷)
  3. 二刷结束:从高频题目索引 Top 40 里随机挑 3 道白板手撕,15 分钟内能写完几道?

常见追问

  • 跳过的那些题以后要补吗? 面试前不用。等你已经能稳定通过手撕环节,想再提升一层再回来补——那时候你会发现跳过的题大多是”已经会的套路换个皮”。真正值得回头的只有两类:Hard 白名单外但你面的公司特别爱考的(查高频题目索引的公司标注),以及自己错题本里反复卡的。

  • 只刷 2/3 会不会漏掉考点? 会漏,但漏的是低频考点。本方案的 144 题覆盖了 Hot100 全部 100 道题、高频题目索引 Top 40 里的绝大多数。剩下的风险用另一种方式对冲更划算:与其多刷 50 道冷门题,不如把已刷的题二刷到”闭眼默写”——面试挂在”见过但写不利索”上的人,远多于挂在”没见过”上的人

  • Hard 真的一道都不看吗? 不是。本方案保留 6 道 ★★★★★ 的 Hard 必刷,另外 7 道要”读题解知套路”(各 5 分钟),只是不默写、不二刷。完全不碰 Hard 的风险在于:真遇到时连暴力解都说不出,直接冷场。

  • 多久能刷完? 4 周(每天 34 小时)或 8 周(每天 1.52 小时)。别信”三天速通”——模板的形成需要间隔重复,压缩到三天的结果是第四天全忘。

  • 一刷就直接看答案,会不会养成依赖? 一刷会,二刷不会。二刷的规则是完全不看题解,那一步会把依赖强行掰回来。真正危险的是相反的情况:一刷硬啃两小时不看答案,一周才刷 10 道题,最后因为进度焦虑而放弃。

  • 用什么语言刷? 面试用什么就用什么,本库题解是 Java。别为了”代码短”临时换 Python——手撕时面试官会追问语言细节(比如 Java 的 HashMap 扩容、Integer 缓存),用不熟的语言容易在追问里翻车。

  • 刷题和背八股怎么分配时间? 手撕通常只占面试 20~30 分钟、一到两道题,八股占的时间更长。但手撕是硬门槛——写不出来后面聊得再好也难过。建议:一阶段期间算法优先(每天 70% 时间),二阶段开始转成算法/八股各半,从知识点索引同步推进。

相关

  • 算法总览 —— 14 个套路从何而来、框架思维、五步做题法(本页是它的执行版)
  • 算法题索引 —— 全库题解按「套路 → 技术词」分组(篇数以该页为准)
  • 高频题目索引 —— Top 40 高频题 + 各公司风格,时间不够时的最短路径
  • 知识点索引 —— 八股总枢纽,二阶段开始同步推进
  • 数据结构与算法 —— 算法相关的八股考点(复杂度、排序稳定性等)