本页由
scripts/gen_topics.py生成,勿手编。 改题解的topics:/techniques:/元数据行后跑一次脚本即可。结构:套路(为什么这些题是同一类) → 题目(技术词以标签形式标注)。一题可以横跨多个套路(如「接雨水」同时是数组、双指针、单调栈),各处指向的是同一份物理题解。
频次:★★★★★ 几乎必考 / ★★★★ 高频 / ★★★ 常见 / ★★ 偶考。难度:🟢 易 / 🟡 中 / 🔴 难。 难度/频次/公司以题解元数据行为权威源,本页是它的视图。公司标注为大致倾向,以实际面试为准。
相关:高频题目索引(按热度排序,跨套路)。 总览:算法总览(框架思维 + 方法论)。 路线:刷题方案(两阶段打法:随想录筑基 → Hot100 验收,每章标了刷哪些跳哪些)。
怎么用这份索引
- 按套路刷,不按题号刷。每个套路先做代表题建立模式,再横向扩展变式——套路页里「为什么这些题是同一个套路」才是主线。
- 技术词以标签形式标注在题目行尾(如
#对撞指针),同一个套路下的技术词彼此不可替代,搞混了就会硬套模板。 - 高频题(★★★★★)优先,见 高频算法题 Top 40。
- 每题留 Java 解 + 复杂度 + 一句变式;难题写关联题互链,
## 关联题是知识图谱的边。 - 不知道从哪开始就别自己排顺序,照 刷题方案 走:一阶段按随想录顺序筑基 94 题(每章标了必刷/跳过),二阶段用 Hot100 验收。本页是「按套路查题」的视图,那页是「按什么顺序刷完」的执行手册。
套路速查
共 14 个套路、265 篇题解。
数组与字符串
数组题的大部分”技巧”其实只有两类——用下标/原地交换省掉额外空间,或者用一次预处理把重复计算的区间查询/更新降到 O(1)。认出属于哪一类,思路就定了一半。
详解见 数组与字符串。
-
151. 反转字符串中的单词 · 🟡 · ★★★★ · 字节/美团
#原地读写指针 -
41. 缺失的第一个正数 · 🔴 · ★★★★ · 字节/阿里
#原地读写指针 -
26. 删除有序数组中的重复项 · 🟢 · ★★★ · 全厂
#原地读写指针 -
88. 合并两个有序数组 · 🟢 · ★★★ · 全厂
#原地读写指针 -
283. 移动零 · 🟢 · ★★★ · 美团/快手
#原地读写指针 -
448. 找到所有数组中消失的数字 · 🟢 · ★★★ · 百度
#原地读写指针 -
541. 反转字符串 II · 🟢 · ★★★ · 全厂
#原地读写指针 -
31. 下一个排列 · 🟡 · ★★★ · 阿里
#原地读写指针 -
189. 轮转数组 · 🟡 · ★★★ · 美团/京东
#原地读写指针 -
27. 移除元素 · 🟢 · ★★ · 全厂
#原地读写指针 -
15. 三数之和 · 🟡 · ★★★★★ · 字节/美团/阿里
#对撞指针 -
42. 接雨水 · 🔴 · ★★★★★ · 字节/阿里/美团
#对撞指针 -
11. 盛最多水的容器 · 🟡 · ★★★★ · 腾讯/字节
#对撞指针 -
344. 反转字符串 · 🟢 · ★★★ · 全厂
#对撞指针 -
977. 有序数组的平方 · 🟢 · ★★★ · 字节
#对撞指针 -
238. 除自身以外数组的乘积 · 🟡 · ★★★★ · 字节/阿里
#前缀和与差分 -
560. 和为 K 的子数组 · 🟡 · ★★★★ · 字节/美团
#前缀和与差分 -
303. 区域和检索 - 数组不可变 · 🟢 · ★★★ · 全厂
#前缀和与差分 -
304. 二维区域和检索 - 矩阵不可变 · 🟡 · ★★★ · 美团
#前缀和与差分 -
1094. 拼车 · 🟡 · ★★★ · 快手
#前缀和与差分 -
1109. 航班预订统计 · 🟡 · ★★★ · 美团
#前缀和与差分 -
53. 最大子数组和 · 🟢 · ★★★★★ · 全厂
#线性扫描维护状态 -
121. 买卖股票的最佳时机 · 🟢 · ★★★★ · 全厂
#线性扫描维护状态 -
152. 乘积最大子数组 · 🟡 · ★★★ · 字节
#线性扫描维护状态 -
48. 旋转图像 · 🟡 · ★★★ · 腾讯/字节
#矩阵操作 -
54. 螺旋矩阵 · 🟡 · ★★★ · 字节
#矩阵操作 -
73. 矩阵置零 · 🟡 · ★★★ · 百度
#矩阵操作 -
415. 字符串相加 · 🟢 · ★★★★ · 字节/腾讯/美团/阿里
#模拟构造 -
8. 字符串转换整数 · 🟡 · ★★★★ · 字节/腾讯/美团
#模拟构造 -
28. 找出字符串中第一个匹配项的下标 · 🟡 · ★★★★ · 字节/阿里
#模拟构造 -
14. 最长公共前缀 · 🟢 · ★★★ · 字节/腾讯
#模拟构造 -
459. 重复的子字符串 · 🟢 · ★★★ · 全厂
#模拟构造 -
43. 字符串相乘 · 🟡 · ★★★ · 腾讯/字节
#模拟构造 -
66. 加一 · 🟢 · ★★ · 全厂
#模拟构造 -
118. 杨辉三角 · 🟢 · ★★ · 全厂
#模拟构造 -
209. 长度最小的子数组 · 🟡 · ★★★ · 字节/阿里
#滑动窗口 -
1. 两数之和 · 🟢 · ★★★★★ · 全厂
#哈希查表 -
560. 和为 K 的子数组 · 🟡 · ★★★★ · 字节/美团
#哈希查表 -
56. 合并区间 · 🟡 · ★★★★ · 全厂
#区间排序 -
169. 多数元素 · 🟢 · ★★★★ · 字节/腾讯/美团
#摩尔投票 -
287. 寻找重复数 · 🟡 · ★★★★ · 字节/腾讯
#快慢指针 -
268. 缺失数字 · 🟢 · ★★★ · 字节/腾讯
#位运算 -
240. 搜索二维矩阵 II · 🟡 · ★★★★ · 字节/腾讯/美团
#Z字形查找
链表
链表题几乎都是指针操作的模式化组合,真正的武器只有两件——虚拟头节点(dummy)消灭”头节点要不要特判”的分支,和快慢指针。认出该用哪件武器,代码本身反而是最不费脑子的部分。
详解见 链表。
-
21. 合并两个有序链表 · 🟢 · ★★★★★ · 全厂
#虚拟头节点 -
19. 删除倒数第N个结点 · 🟡 · ★★★★★ · 全厂
#虚拟头节点 -
25. K个一组翻转链表 · 🔴 · ★★★★★ · 字节/阿里/腾讯
#虚拟头节点 -
2. 两数相加 · 🟡 · ★★★★ · 全厂
#虚拟头节点 -
82. 删除排序链表中的重复元素 II · 🟡 · ★★★★ · 字节/腾讯/美团/阿里
#虚拟头节点 -
92. 反转链表II · 🟡 · ★★★★ · 字节/美团
#虚拟头节点 -
148. 排序链表 · 🟡 · ★★★★ · 字节/阿里
#虚拟头节点 -
23. 合并K个排序链表 · 🔴 · ★★★★ · 阿里/字节
#虚拟头节点 -
24. 两两交换链表结点 · 🟡 · ★★★ · 美团
#虚拟头节点 -
203. 移除链表元素 · 🟢 · ★★ · 全厂
#虚拟头节点 -
707. 设计链表 · 🟡 · ★★ · 字节
#虚拟头节点 -
206. 反转链表 · 🟢 · ★★★★★ · 全厂
#三指针反转 -
25. K个一组翻转链表 · 🔴 · ★★★★★ · 字节/阿里/腾讯
#三指针反转 -
234. 回文链表 · 🟢 · ★★★★ · 字节/腾讯/美团
#三指针反转 -
143. 重排链表 · 🟡 · ★★★★ · 字节/腾讯/美团
#三指针反转 -
141. 环形链表I · 🟢 · ★★★★★ · 全厂
#快慢指针 -
19. 删除倒数第N个结点 · 🟡 · ★★★★★ · 全厂
#快慢指针 -
142. 环形链表II · 🟡 · ★★★★★ · 字节/腾讯
#快慢指针 -
234. 回文链表 · 🟢 · ★★★★ · 字节/腾讯/美团
#快慢指针 -
143. 重排链表 · 🟡 · ★★★★ · 字节/腾讯/美团
#快慢指针 -
148. 排序链表 · 🟡 · ★★★★ · 字节/阿里
#快慢指针 -
160. 相交链表 · 🟢 · ★★★ · 快手
#快慢指针 -
876. 链表的中间结点 · 🟢 · ★★ · 美团
#快慢指针 -
138. 复制带随机指针的链表 · 🟡 · ★★★★ · 字节/美团
#节点映射 -
83. 删除排序链表中的重复元素 · 🟢 · ★★★★ · 字节/美团
#双指针归并 -
补充题1. 排序奇升偶降链表 · 🟡 · ★★★★ · 字节
#双指针归并 -
61. 旋转链表 · 🟡 · ★★★★ · 字节/腾讯
#双指针模拟
栈与队列
栈解决”最近的还没处理完”(括号匹配、表达式求值、函数调用),队列解决”先来的先处理”(层序遍历、BFS)。单调栈/单调队列是在此之上加了一条淘汰规则——不是谁都留在栈/队列里,而是只留下”未来还可能有用”的那些。
详解见 栈与队列。
-
20. 有效的括号 · 🟢 · ★★★★★ · 全厂
#表达式与嵌套栈 -
394. 字符串解码 · 🟡 · ★★★★ · 腾讯/字节
#表达式与嵌套栈 -
1047. 删除字符串中的所有相邻重复项 · 🟢 · ★★★ · 全厂
#表达式与嵌套栈 -
150. 逆波兰表达式求值 · 🟡 · ★★★ · 百度
#表达式与嵌套栈 -
42. 接雨水 · 🔴 · ★★★★★ · 字节/阿里/美团
#单调栈与单调队列 -
239. 滑动窗口最大值 · 🔴 · ★★★★★ · 字节/阿里/美团
#单调栈与单调队列 -
739. 每日温度 · 🟡 · ★★★★ · 字节/美团
#单调栈与单调队列 -
84. 柱状图中最大矩形 · 🔴 · ★★★★ · 阿里/字节
#单调栈与单调队列 -
496. 下一个更大元素 I · 🟢 · ★★★ · 全厂
#单调栈与单调队列 -
503. 下一个更大元素 II · 🟡 · ★★★ · 美团
#单调栈与单调队列 -
155. 最小栈 · 🟢 · ★★★★ · 字节/美团
#栈队列设计 -
225. 用队列实现栈 · 🟢 · ★★★ · 美团
#栈队列设计 -
232. 用栈实现队列 · 🟢 · ★★★ · 全厂
#栈队列设计
哈希表
哈希表把”这个东西之前见过吗/出现过几次/对应什么”这类查询降到 O(1)。凡是暴力解法里有一层”遍历前面所有元素,看有没有满足条件的”,几乎都能用哈希表把那层遍历换成一次查表。
详解见 哈希表。
-
1. 两数之和 · 🟢 · ★★★★★ · 全厂
#哈希查表 -
49. 字母异位词分组 · 🟡 · ★★★★ · 美团/字节
#哈希查表 -
128. 最长连续序列 · 🟡 · ★★★★ · 字节/阿里
#哈希查表 -
560. 和为 K 的子数组 · 🟡 · ★★★★ · 字节/美团
#哈希查表 -
202. 快乐数 · 🟢 · ★★★ · 全厂
#哈希查表 -
242. 有效的字母异位词 · 🟢 · ★★★ · 全厂
#哈希查表 -
349. 两个数组的交集 · 🟢 · ★★★ · 全厂
#哈希查表 -
437. 路径总和III · 🟡 · ★★★ · 字节/美团
#哈希查表 -
146. LRU缓存 · 🟡 · ★★★★★ · 阿里/字节/美团/腾讯
#哈希+辅助结构 -
380. O(1) 时间插入、删除和获取随机元素 · 🟡 · ★★★★ · 美团/字节
#哈希+辅助结构 -
460. LFU 缓存 · 🔴 · ★★★★ · 字节/阿里
#哈希+辅助结构 -
381. O(1) 时间插入、删除和获取随机元素 - 允许重复 · 🔴 · ★★★ · 字节
#哈希+辅助结构 -
432. 全 O(1) 的数据结构 · 🔴 · ★★★ · 阿里
#哈希+辅助结构
双指针与滑动窗口
两个指针能把很多 O(n²) 的暴力枚举降到 O(n),前提是移动指针时能保证不会漏掉正确答案——这个前提是否成立,取决于指针是”对撞”还是”同向”,而滑动窗口只是”同向双指针”的一种特殊形态。
详解见 双指针与滑动窗口。
-
15. 三数之和 · 🟡 · ★★★★★ · 字节/美团/阿里
#对撞指针 -
42. 接雨水 · 🔴 · ★★★★★ · 字节/阿里/美团
#对撞指针 -
11. 盛最多水的容器 · 🟡 · ★★★★ · 腾讯/字节
#对撞指针 -
18. 四数之和 · 🟡 · ★★★ · 字节/美团
#对撞指针 -
167. 两数之和II-输入有序 · 🟡 · ★★★ · 全厂
#对撞指针 -
3. 无重复字符的最长子串 · 🟡 · ★★★★★ · 全厂
#滑动窗口 -
76. 最小覆盖子串 · 🔴 · ★★★★★ · 字节/阿里
#滑动窗口 -
239. 滑动窗口最大值 · 🔴 · ★★★★★ · 字节/阿里/美团
#滑动窗口 -
438. 找到字符串中所有字母异位词 · 🟡 · ★★★ · 美团
#滑动窗口 -
567. 字符串的排列 · 🟡 · ★★★ · 快手
#滑动窗口 -
75. 颜色分类 · 🟡 · ★★★★ · 字节/腾讯
#原地读写指针 -
283. 移动零 · 🟢 · ★★★ · 美团/快手
#原地读写指针 -
125. 验证回文串 · 🟢 · ★★★ · 字节/腾讯/美团
#双指针模拟
二分查找
二分查找的必要条件不是”数组有序”,而是**“答案空间上存在一个单调的判定条件”**——能把问题转化成”在一段区间里找到条件由假变真的那个分界点”,就能二分,哪怕数组本身看起来是”无序”的。
详解见 二分查找。
-
33. 搜索旋转排序数组 · 🟡 · ★★★★★ · 字节/阿里/美团
#二分边界 -
4. 寻找两个正序数组的中位数 · 🔴 · ★★★★★ · 阿里/字节/腾讯
#二分边界 -
704. 二分查找 · 🟢 · ★★★★ · 字节/腾讯/美团
#二分边界 -
34. 在排序数组中查找元素的第一个和最后一个位置 · 🟡 · ★★★★ · 全厂
#二分边界 -
162. 寻找峰值 · 🟡 · ★★★★ · 字节/腾讯/美团
#二分边界 -
35. 搜索插入位置 · 🟢 · ★★★ · 字节/美团
#二分边界 -
剑指 Offer 53 - II. 0~n-1 中缺失的数字 · 🟢 · ★★★ · 美团
#二分边界 -
69. x 的平方根 · 🟢 · ★★★ · 全厂
#二分边界 -
74. 搜索二维矩阵 · 🟡 · ★★★ · 百度
#二分边界 -
153. 寻找旋转排序数组中的最小值 · 🟡 · ★★★ · 字节
#二分边界 -
1206. 跳表 · 🔴 · ★★★ · 字节
#跳表设计
二叉树
几乎所有二叉树题都能套进同一个框架——“整棵树的答案 = 用根节点的信息,组合左右子树各自的答案”。想清楚”子树需要返回什么信息给父节点”,代码基本就写出来了;唯一的例外是层序遍历,它天生是迭代(BFS)而非递归的活。
详解见 二叉树。
-
108. 将有序数组转换为二叉搜索树 · 🟢 · ★★★★ · 字节/美团
#递归 -
114. 二叉树展开为链表 · 🟡 · ★★★★ · 字节/腾讯
#递归 -
100. 相同的树 · 🟢 · ★★★ · 字节
#递归 -
101. 对称二叉树 · 🟢 · ★★★ · 字节
#递归 -
111. 二叉树的最小深度 · 🟢 · ★★★ · 全厂
#递归 -
222. 完全二叉树的节点个数 · 🟡 · ★★★ · 字节/阿里
#递归 -
437. 路径总和III · 🟡 · ★★★ · 字节/美团
#递归 -
404. 左叶子之和 · 🟢 · ★★ · 全厂
#递归 -
617. 合并二叉树 · 🟢 · ★★ · 全厂
#递归 -
236. 二叉树的最近公共祖先 · 🟡 · ★★★★★ · 字节/腾讯/美团
#递归返回值设计 -
104. 二叉树的最大深度 · 🟢 · ★★★★ · 全厂
#递归返回值设计 -
110. 平衡二叉树 · 🟢 · ★★★★ · 字节/美团
#递归返回值设计 -
543. 二叉树的直径 · 🟢 · ★★★★ · 美团/字节
#递归返回值设计 -
98. 验证二叉搜索树 · 🟡 · ★★★★ · 字节/美团
#递归返回值设计 -
337. 打家劫舍 III · 🟡 · ★★★★ · 字节/阿里
#递归返回值设计 -
124. 二叉树中的最大路径和 · 🔴 · ★★★★ · 阿里/字节
#递归返回值设计 -
226. 翻转二叉树 · 🟢 · ★★★ · 字节
#递归返回值设计 -
102. 二叉树的层序遍历 · 🟡 · ★★★★★ · 全厂
#BFS层序 -
103. 二叉树的锯齿形层序遍历 · 🟡 · ★★★★ · 字节/腾讯/美团
#BFS层序 -
958. 二叉树的完全性检验 · 🟡 · ★★★★ · 字节/美团
#BFS层序 -
199. 二叉树的右视图 · 🟡 · ★★★ · 美团
#BFS层序 -
513. 找树左下角的值 · 🟡 · ★★★ · 字节
#BFS层序 -
662. 二叉树最大宽度 · 🟡 · ★★★ · 字节
#BFS层序 -
919. 完全二叉树插入器 · 🟡 · ★★ · 百度
#BFS层序 -
235. 二叉搜索树的最近公共祖先 · 🟢 · ★★★★ · 字节/阿里
#BST中序 -
98. 验证二叉搜索树 · 🟡 · ★★★★ · 字节/美团
#BST中序 -
450. 删除二叉搜索树中的节点 · 🟡 · ★★★★ · 字节/阿里
#BST中序 -
701. 二叉搜索树中的插入操作 · 🟢 · ★★★ · 全厂
#BST中序 -
230. 二叉搜索树中第 K 小的元素 · 🟡 · ★★★ · 阿里
#BST中序 -
538. 把二叉搜索树转换为累加树 · 🟡 · ★★★ · 阿里/字节
#BST中序 -
669. 修剪二叉搜索树 · 🟡 · ★★★ · 字节
#BST中序 -
700. 二叉搜索树中的搜索 · 🟢 · ★★ · 全厂
#BST中序 -
112. 路径总和 · 🟢 · ★★★ · 全厂
#DFS -
257. 二叉树的所有路径 · 🟢 · ★★★ · 美团
#DFS -
129. 求根节点到叶节点数字之和 · 🟡 · ★★★ · 字节
#DFS -
108. 将有序数组转换为二叉搜索树 · 🟢 · ★★★★ · 字节/美团
#树的构造与序列化 -
105. 从前序与中序遍历构造二叉树 · 🟡 · ★★★★ · 字节/腾讯
#树的构造与序列化 -
297. 二叉树的序列化与反序列化 · 🔴 · ★★★★ · 字节/阿里
#树的构造与序列化 -
113. 路径总和 II · 🟡 · ★★★ · 百度
#回溯框架 -
94. 二叉树的中序遍历 · 🟢 · ★★★★ · 字节/腾讯/美团/阿里
#栈模拟递归 -
144. 二叉树的前序遍历 · 🟢 · ★★★★ · 腾讯/美团/字节
#栈模拟递归
图论
图是”允许有环、允许多个父节点”的树,所以树的 DFS/BFS 在图上全部适用,只是多了一件必须做的事——记录访问过的节点,否则会在环里死循环。图论题的额外技巧(拓扑排序、并查集)都是为了处理树没有的两个新问题:依赖顺序和动态连通性。
详解见 图论。
-
200. 岛屿数量 · 🟡 · ★★★★★ · 全厂
#图遍历 -
994. 腐烂的橘子 · 🟡 · ★★★★ · 美团/字节
#图遍历 -
127. 单词接龙 · 🔴 · ★★★★ · 字节/阿里/腾讯
#图遍历 -
133. 克隆图 · 🟡 · ★★★ · 腾讯
#图遍历 -
417. 太平洋大西洋水流 · 🟡 · ★★★ · 美团
#图遍历 -
797. 所有可能的路径 · 🟡 · ★★★ · 快手
#图遍历 -
841. 钥匙和房间 · 🟡 · ★★★ · 字节
#图遍历 -
130. 被围绕的区域 · 🟡 · ★★★★ · 字节/阿里/腾讯
#DFS -
695. 岛屿的最大面积 · 🟡 · ★★★★ · 字节/阿里
#DFS -
827. 最大人工岛 · 🔴 · ★★★★ · 字节/阿里
#DFS -
463. 岛屿的周长 · 🟢 · ★★★ · 字节
#DFS -
1020. 飞地的数量 · 🟡 · ★★★ · 字节
#DFS -
207. 课程表 · 🟡 · ★★★★★ · 字节/阿里/美团
#拓扑排序 -
210. 课程表 II · 🟡 · ★★★★ · 字节
#拓扑排序 -
剑指 Offer II 14. 拓扑排序模板 · 🟡 · ★★★ · 美团
#拓扑排序 -
802. 找到最终的安全状态 · 🟡 · ★★★ · 阿里
#拓扑排序 -
547. 省份数量 · 🟡 · ★★★★ · 字节
#并查集 -
685. 冗余连接 II · 🔴 · ★★★★ · 字节/阿里
#并查集 -
684. 冗余连接 · 🟡 · ★★★ · 美团
#并查集 -
990. 等式方程的可满足性 · 🟡 · ★★★ · 阿里
#并查集 -
1319. 连通网络的操作次数 · 🟡 · ★★★ · 快手
#并查集 -
787. K 站中转内最便宜的航班 · 🟡 · ★★★★ · 字节
#最短路
回溯
回溯就是 DFS 加上一句”撤销现场”——穷举所有可能解的通用框架是「做选择 → 递归进入下一层 → 撤销选择」,三步缺一不可。写不出撤销那一步,是这类题最常见的翻车原因。
详解见 回溯。
-
22. 括号生成 · 🟡 · ★★★★★ · 字节/阿里/腾讯
#回溯框架 -
39. 组合总和 · 🟡 · ★★★★★ · 字节/美团
#回溯框架 -
46. 全排列 · 🟡 · ★★★★★ · 全厂
#回溯框架 -
78. 子集 · 🟡 · ★★★★★ · 全厂
#回溯框架 -
17. 电话号码的字母组合 · 🟡 · ★★★★ · 美团/字节
#回溯框架 -
47. 全排列 II · 🟡 · ★★★★ · 字节/美团
#回溯框架 -
77. 组合 · 🟡 · ★★★★ · 字节/阿里
#回溯框架 -
79. 单词搜索 · 🟡 · ★★★★ · 字节/腾讯
#回溯框架 -
51. N 皇后 · 🔴 · ★★★★ · 字节/阿里
#回溯框架 -
40. 组合总和 II · 🟡 · ★★★ · 阿里
#回溯框架 -
90. 子集 II · 🟡 · ★★★ · 美团
#回溯框架 -
93. 复原 IP 地址 · 🟡 · ★★★ · 快手
#回溯框架 -
131. 分割回文串 · 🟡 · ★★★ · 美团
#回溯框架 -
216. 组合总和 III · 🟡 · ★★★ · 字节
#回溯框架 -
491. 非递减子序列 · 🟡 · ★★★ · 字节
#回溯框架 -
37. 解数独 · 🔴 · ★★★ · 阿里
#回溯框架 -
332. 重新安排行程 · 🔴 · ★★★ · 字节/阿里
#回溯框架 -
22. 括号生成 · 🟡 · ★★★★★ · 字节/阿里/腾讯
#剪枝 -
39. 组合总和 · 🟡 · ★★★★★ · 字节/美团
#剪枝 -
47. 全排列 II · 🟡 · ★★★★ · 字节/美团
#剪枝 -
79. 单词搜索 · 🟡 · ★★★★ · 字节/腾讯
#剪枝 -
51. N 皇后 · 🔴 · ★★★★ · 字节/阿里
#剪枝 -
40. 组合总和 II · 🟡 · ★★★ · 阿里
#剪枝 -
90. 子集 II · 🟡 · ★★★ · 美团
#剪枝 -
93. 复原 IP 地址 · 🟡 · ★★★ · 快手
#剪枝 -
131. 分割回文串 · 🟡 · ★★★ · 美团
#剪枝 -
37. 解数独 · 🔴 · ★★★ · 阿里
#剪枝
动态规划与贪心
动态规划和贪心都是”不穷举所有解,靠某个性质剪掉大部分选择”,区别在于动态规划把每一步的所有候选都存下来供后面复用,贪心直接证明”每一步只保留一个候选就够了”。判断一道题该用哪个,比写出代码本身更考验功力,也是这一页真正的价值所在。
详解见 动态规划与贪心。
-
53. 最大子数组和 · 🟢 · ★★★★★ · 全厂
#线性DP -
70. 爬楼梯 · 🟢 · ★★★★★ · 全厂
#线性DP -
198. 打家劫舍 · 🟢 · ★★★★★ · 全厂
#线性DP -
300. 最长递增子序列 · 🟡 · ★★★★★ · 字节/阿里/美团
#线性DP -
96. 不同的二叉搜索树 · 🟡 · ★★★★ · 字节/阿里
#线性DP -
213. 打家劫舍 II · 🟡 · ★★★★ · 美团
#线性DP -
32. 最长有效括号 · 🔴 · ★★★★ · 字节
#线性DP -
509. 斐波那契数 · 🟢 · ★★★ · 全厂
#线性DP -
674. 最长连续递增序列 · 🟢 · ★★★ · 字节
#线性DP -
746. 使用最小花费爬楼梯 · 🟢 · ★★★ · 字节
#线性DP -
91. 解码方法 · 🟡 · ★★★ · 字节/美团
#线性DP -
152. 乘积最大子数组 · 🟡 · ★★★ · 字节
#线性DP -
343. 整数拆分 · 🟡 · ★★★ · 字节/腾讯
#线性DP -
72. 编辑距离 · 🟡 · ★★★★★ · 字节/阿里/腾讯
#二维DP -
1143. 最长公共子序列 · 🟡 · ★★★★★ · 字节/腾讯
#二维DP -
补充题2. 圆环回原点问题 · 🟡 · ★★★★ · 字节
#二维DP -
64. 最小路径和 · 🟡 · ★★★★ · 美团
#二维DP -
221. 最大正方形 · 🟡 · ★★★★ · 字节/美团
#二维DP -
516. 最长回文子序列 · 🟡 · ★★★★ · 字节/腾讯
#二维DP -
718. 最长重复子数组 · 🟡 · ★★★★ · 字节/腾讯
#二维DP -
115. 不同的子序列 · 🔴 · ★★★★ · 字节/阿里
#二维DP -
392. 判断子序列 · 🟢 · ★★★ · 字节
#二维DP -
62. 不同路径 · 🟡 · ★★★ · 全厂
#二维DP -
63. 不同路径 II · 🟡 · ★★★ · 美团
#二维DP -
120. 三角形最小路径和 · 🟡 · ★★★ · 腾讯/美团
#二维DP -
583. 两个字符串的删除操作 · 🟡 · ★★★ · 字节
#二维DP -
1035. 不相交的线 · 🟡 · ★★★ · 字节
#二维DP -
10. 正则表达式匹配 · 🔴 · ★★★ · 字节/阿里
#二维DP -
312. 戳气球 · 🔴 · ★★★ · 阿里
#二维DP -
123. 买卖股票的最佳时机 III · 🔴 · ★★★★ · 字节/阿里/腾讯
#股票状态机DP -
309. 买卖股票的最佳时机含冷冻期 · 🟡 · ★★★ · 阿里
#股票状态机DP -
714. 买卖股票的最佳时机含手续费 · 🟡 · ★★★ · 快手
#股票状态机DP -
188. 买卖股票的最佳时机 IV · 🔴 · ★★★ · 字节
#股票状态机DP -
322. 零钱兑换 · 🟡 · ★★★★★ · 字节/美团/阿里
#背包 -
139. 单词拆分 · 🟡 · ★★★★ · 字节/阿里
#背包 -
279. 完全平方数 · 🟡 · ★★★★ · 字节/腾讯
#背包 -
416. 分割等和子集 · 🟡 · ★★★★ · 美团/字节
#背包 -
494. 目标和 · 🟡 · ★★★★ · 字节/腾讯
#背包 -
518. 零钱兑换 II · 🟡 · ★★★★ · 字节/腾讯/美团
#背包 -
377. 组合总和 IV · 🟡 · ★★★ · 字节
#背包 -
474. 一和零 · 🟡 · ★★★ · 字节
#背包 -
1049. 最后一块石头的重量 II · 🟡 · ★★★ · 字节
#背包 -
45. 跳跃游戏 II · 🟡 · ★★★★ · 字节/阿里
#贪心证明 -
55. 跳跃游戏 · 🟡 · ★★★★ · 字节/美团
#贪心证明 -
122. 买卖股票的最佳时机 II · 🟡 · ★★★★ · 美团
#贪心证明 -
435. 无重叠区间 · 🟡 · ★★★★ · 字节
#贪心证明 -
452. 用最少数量的箭引爆气球 · 🟡 · ★★★★ · 字节/阿里
#贪心证明 -
621. 任务调度器 · 🟡 · ★★★★ · 字节/美团
#贪心证明 -
135. 分发糖果 · 🔴 · ★★★★ · 字节/阿里/腾讯
#贪心证明 -
968. 监控二叉树 · 🔴 · ★★★★ · 字节/阿里
#贪心证明 -
455. 分发饼干 · 🟢 · ★★★ · 字节
#贪心证明 -
860. 柠檬水找零 · 🟢 · ★★★ · 字节
#贪心证明 -
1005. K 次取反后最大化的数组和 · 🟢 · ★★★ · 字节
#贪心证明 -
134. 加油站 · 🟡 · ★★★ · 字节
#贪心证明 -
376. 摆动序列 · 🟡 · ★★★ · 字节/美团
#贪心证明 -
406. 根据身高重建队列 · 🟡 · ★★★ · 阿里
#贪心证明 -
738. 单调递增的数字 · 🟡 · ★★★ · 字节
#贪心证明 -
763. 划分字母区间 · 🟡 · ★★★ · 美团
#贪心证明 -
53. 最大子数组和 · 🟢 · ★★★★★ · 全厂
#线性扫描维护状态 -
121. 买卖股票的最佳时机 · 🟢 · ★★★★ · 全厂
#线性扫描维护状态 -
152. 乘积最大子数组 · 🟡 · ★★★ · 字节
#线性扫描维护状态 -
5. 最长回文子串 · 🟡 · ★★★★ · 全厂
#中心扩展 -
647. 回文子串 · 🟡 · ★★★★ · 字节/腾讯/美团
#中心扩展
排序与堆
需要”全部有序”就用排序;只需要”前 K 个”或”动态维护当前最值”,用堆——堆的本质是一棵只保证”父节点比子节点更优”、不要求兄弟节点之间有序的弱化二叉树,正是这个弱化换来了 O(log n) 的插入/取出,比维护整体有序便宜得多。
详解见 排序与堆。
-
912. 排序数组 · 🟡 · ★★★★★ · 字节/阿里/美团
#排序算法实现 -
75. 颜色分类 · 🟡 · ★★★★ · 字节/腾讯
#排序算法实现 -
剑指 Offer 45. 把数组排成最小的数 · 🟡 · ★★★ · 阿里
#排序算法实现 -
215. 数组中的第 K 个最大元素 · 🟡 · ★★★★★ · 全厂
#堆TopK -
剑指 Offer 40. 最小的 K 个数 · 🟢 · ★★★★ · 全厂
#堆TopK -
347. 前 K 个高频元素 · 🟡 · ★★★★ · 美团/字节
#堆TopK -
703. 数据流中的第 K 大元素 · 🟢 · ★★★ · 美团
#堆TopK -
215. 数组中的第 K 个最大元素 · 🟡 · ★★★★★ · 全厂
#快速选择 -
56. 合并区间 · 🟡 · ★★★★ · 全厂
#区间排序 -
253. 会议室 II · 🟡 · ★★★★ · 字节/美团
#区间排序 -
252. 会议室 · 🟢 · ★★★ · 字节
#区间排序 -
23. 合并K个排序链表 · 🔴 · ★★★★ · 阿里/字节
#多路归并 -
295. 数据流的中位数 · 🔴 · ★★★★ · 字节/阿里
#对顶堆
字典树
字典树(Trie)是”用公共前缀换空间和查询效率”的哈希表替代品——当查询模式是”前缀匹配”而不是”精确匹配”时,哈希表无能为力(它只能判断整个字符串是否存在),字典树天然适合。
详解见 字典树。
-
208. 实现 Trie · 🟡 · ★★★★ · 字节/美团
#Trie前缀树 -
211. 添加与搜索单词 · 🟡 · ★★★ · 字节
#Trie前缀树 -
677. 键值映射 · 🟡 · ★★★ · 百度
#Trie前缀树 -
212. 单词搜索 II · 🔴 · ★★★ · 阿里
#Trie前缀树 -
720. 词典中最长的单词 · 🟢 · ★★ · 快手
#Trie前缀树 -
648. 单词替换 · 🟡 · ★★ · 美团
#Trie前缀树 -
720. 词典中最长的单词 · 🟢 · ★★ · 快手
#哈希查表
位运算
位运算题的价值几乎都来自异或(XOR)的两条性质——自反性(
a^a=0)让”找落单元素”不需要额外空间,无进位加法的特性让它能模拟加法。认出题目在利用哪一条,解法基本就出来了。
详解见 位运算。
-
136. 只出现一次的数字 · 🟢 · ★★★★ · 全厂
#异或自反 -
260. 只出现一次的数字 III · 🟡 · ★★★ · 字节
#异或自反 -
78. 子集 · 🟡 · ★★★★★ · 全厂
#位掩码枚举 -
338. 比特位计数 · 🟢 · ★★★ · 美团
#逐位构造 -
461. 汉明距离 · 🟢 · ★★★ · 字节
#逐位构造 -
371. 两整数之和 · 🟡 · ★★★ · 阿里
#逐位构造
数学
数学题在算法面试中的考察点往往不是高深的数论,而是如何把现实问题抽象成数学模型,再用程序表达——拒绝采样、概率均等、模运算性质是最高频的三个工具。
详解见 数学。
-
470. 用 Rand7() 实现 Rand10() · 🟡 · ★★★★ · 字节/腾讯
#拒绝采样 -
50. Pow(x, n) · 🟡 · ★★★★ · 字节/腾讯
#快速幂 -
9. 回文数 · 🟢 · ★★★ · 腾讯/美团
#模拟构造 -
7. 整数反转 · 🟡 · ★★★ · 字节/腾讯/美团
#模拟构造