算法思想不要孤立背。面试里更有用的问法是:什么信号提示我该用它?模板里最容易错的地方在哪里?如果面试官改条件,我应该从哪个变量或状态开始调整?
这份题单按思想组织,每一类都给出“识别信号、常用模板、代表题、复盘重点”。题目数量控制在能代表模板的范围内,先把这些题讲明白,比机械刷更多题更划算。
怎么用这份题单
不要一上来就把所有题目按顺序刷完。更适合面试准备的方式是:先读对应的模板文章,确认自己能手写核心代码,再做“必刷题”,最后用“进阶题”检查边界和变体。
目标建议动作快速建立模板先读 二分查找、双指针与滑动窗口、DFS/BFS 这些高频模板文章补齐搜索和 DP继续读 回溯算法、动态规划,每类至少手写 2 道基础题面试前查漏补缺用 贪心算法、Top K 问题、并查集 补齐常见变体复盘自己的答案每题写下题型识别信号、核心变量含义、复杂度、边界样例。如果这些讲不清,说明这题还没真正掌握
目标建议动作
目标
建议动作
快速建立模板先读 二分查找、双指针与滑动窗口、DFS/BFS 这些高频模板文章
快速建立模板
先读 二分查找、双指针与滑动窗口、DFS/BFS 这些高频模板文章
补齐搜索和 DP继续读 回溯算法、动态规划,每类至少手写 2 道基础题
补齐搜索和 DP
继续读 回溯算法、动态规划,每类至少手写 2 道基础题
面试前查漏补缺用 贪心算法、Top K 问题、并查集 补齐常见变体
面试前查漏补缺
用 贪心算法、Top K 问题、并查集 补齐常见变体
复盘自己的答案每题写下题型识别信号、核心变量含义、复杂度、边界样例。如果这些讲不清,说明这题还没真正掌握
复盘自己的答案
每题写下题型识别信号、核心变量含义、复杂度、边界样例。如果这些讲不清,说明这题还没真正掌握
二分查找
项目内容识别信号有序数组、单调条件、找边界、找最小可行值或最大可行值常用模板基础二分、左边界、右边界、答案二分必刷题704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置进阶题35. 搜索插入位置、875. 爱吃香蕉的珂珂复盘重点循环条件、mid 计算、边界更新后是否会死循环
项目内容
项目
内容
识别信号有序数组、单调条件、找边界、找最小可行值或最大可行值
识别信号
有序数组、单调条件、找边界、找最小可行值或最大可行值
常用模板基础二分、左边界、右边界、答案二分
常用模板
基础二分、左边界、右边界、答案二分
必刷题704. 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置
必刷题
- 二分查找、34. 在排序数组中查找元素的第一个和最后一个位置
进阶题35. 搜索插入位置、875. 爱吃香蕉的珂珂
进阶题
- 搜索插入位置、875. 爱吃香蕉的珂珂
复盘重点循环条件、mid 计算、边界更新后是否会死循环
复盘重点
循环条件、mid 计算、边界更新后是否会死循环
mid
双指针
项目内容识别信号有序数组、原地修改、两端向中间收缩、链表快慢追赶常用模板左右指针、快慢指针、读写指针必刷题26. 删除有序数组中的重复项、977. 有序数组的平方进阶题15. 三数之和、142. 环形链表 II复盘重点指针含义要固定,去重条件不要漏,链表题先画 3 个节点
项目内容
项目
内容
识别信号有序数组、原地修改、两端向中间收缩、链表快慢追赶
识别信号
有序数组、原地修改、两端向中间收缩、链表快慢追赶
常用模板左右指针、快慢指针、读写指针
常用模板
左右指针、快慢指针、读写指针
必刷题26. 删除有序数组中的重复项、977. 有序数组的平方
必刷题
- 删除有序数组中的重复项、977. 有序数组的平方
进阶题15. 三数之和、142. 环形链表 II
进阶题
- 三数之和、142. 环形链表 II
复盘重点指针含义要固定,去重条件不要漏,链表题先画 3 个节点
复盘重点
指针含义要固定,去重条件不要漏,链表题先画 3 个节点
滑动窗口
项目内容识别信号连续子数组、连续子串、最长/最短、窗口内满足某个条件常用模板固定窗口、可变窗口、计数 Map必刷题3. 无重复字符的最长子串、209. 长度最小的子数组进阶题76. 最小覆盖子串、438. 找到字符串中所有字母异位词复盘重点什么时候扩右边界,什么时候缩左边界,窗口内变量如何维护
项目内容
项目
内容
识别信号连续子数组、连续子串、最长/最短、窗口内满足某个条件
识别信号
连续子数组、连续子串、最长/最短、窗口内满足某个条件
常用模板固定窗口、可变窗口、计数 Map
常用模板
固定窗口、可变窗口、计数 Map
必刷题3. 无重复字符的最长子串、209. 长度最小的子数组
必刷题
- 无重复字符的最长子串、209. 长度最小的子数组
进阶题76. 最小覆盖子串、438. 找到字符串中所有字母异位词
进阶题
- 最小覆盖子串、438. 找到字符串中所有字母异位词
复盘重点什么时候扩右边界,什么时候缩左边界,窗口内变量如何维护
复盘重点
什么时候扩右边界,什么时候缩左边界,窗口内变量如何维护
DFS 与 BFS
项目内容识别信号树遍历、图遍历、矩阵连通块、最短步数、层序遍历常用模板递归 DFS、栈模拟 DFS、队列 BFS、层序 BFS必刷题102. 二叉树的层序遍历、200. 岛屿数量进阶题994. 腐烂的橘子、127. 单词接龙复盘重点访问标记、越界判断、BFS 层数统计
项目内容
项目
内容
识别信号树遍历、图遍历、矩阵连通块、最短步数、层序遍历
识别信号
树遍历、图遍历、矩阵连通块、最短步数、层序遍历
常用模板递归 DFS、栈模拟 DFS、队列 BFS、层序 BFS
常用模板
递归 DFS、栈模拟 DFS、队列 BFS、层序 BFS
必刷题102. 二叉树的层序遍历、200. 岛屿数量
必刷题
- 二叉树的层序遍历、200. 岛屿数量
进阶题994. 腐烂的橘子、127. 单词接龙
进阶题
- 腐烂的橘子、127. 单词接龙
复盘重点访问标记、越界判断、BFS 层数统计
复盘重点
访问标记、越界判断、BFS 层数统计
回溯算法
项目内容识别信号枚举所有方案、路径选择、组合、排列、子集、棋盘约束常用模板路径 path、选择列表、递归层、撤销选择必刷题77. 组合、78. 子集进阶题39. 组合总和、51. N 皇后复盘重点递归参数代表什么,剪枝条件放在循环前还是循环内
项目内容
项目
内容
识别信号枚举所有方案、路径选择、组合、排列、子集、棋盘约束
识别信号
枚举所有方案、路径选择、组合、排列、子集、棋盘约束
常用模板路径 path、选择列表、递归层、撤销选择
常用模板
路径 path、选择列表、递归层、撤销选择
path
必刷题77. 组合、78. 子集
必刷题
- 组合、78. 子集
进阶题39. 组合总和、51. N 皇后
进阶题
- 组合总和、51. N 皇后
复盘重点递归参数代表什么,剪枝条件放在循环前还是循环内
复盘重点
递归参数代表什么,剪枝条件放在循环前还是循环内
动态规划
项目内容识别信号求最优值、方案数、能否到达、子序列、背包、区间合并常用模板一维 DP、二维 DP、滚动数组、背包 DP必刷题70. 爬楼梯、322. 零钱兑换进阶题300. 最长递增子序列、416. 分割等和子集复盘重点dp[i] 的含义、初始化、遍历顺序、是否能压缩空间
项目内容
项目
内容
识别信号求最优值、方案数、能否到达、子序列、背包、区间合并
识别信号
求最优值、方案数、能否到达、子序列、背包、区间合并
常用模板一维 DP、二维 DP、滚动数组、背包 DP
常用模板
一维 DP、二维 DP、滚动数组、背包 DP
必刷题70. 爬楼梯、322. 零钱兑换
必刷题
- 爬楼梯、322. 零钱兑换
进阶题300. 最长递增子序列、416. 分割等和子集
进阶题
- 最长递增子序列、416. 分割等和子集
复盘重点dp[i] 的含义、初始化、遍历顺序、是否能压缩空间
复盘重点
dp[i] 的含义、初始化、遍历顺序、是否能压缩空间
dp[i]
贪心算法
项目内容识别信号每一步选择当前最合适的对象,常伴随排序、区间、跳跃、买卖常用模板排序后选择、维护最远边界、区间合并/覆盖必刷题455. 分发饼干、55. 跳跃游戏进阶题45. 跳跃游戏 II、435. 无重叠区间复盘重点贪心策略为什么不会错,反例能否推翻当前策略
项目内容
项目
内容
识别信号每一步选择当前最合适的对象,常伴随排序、区间、跳跃、买卖
识别信号
每一步选择当前最合适的对象,常伴随排序、区间、跳跃、买卖
常用模板排序后选择、维护最远边界、区间合并/覆盖
常用模板
排序后选择、维护最远边界、区间合并/覆盖
必刷题455. 分发饼干、55. 跳跃游戏
必刷题
- 分发饼干、55. 跳跃游戏
进阶题45. 跳跃游戏 II、435. 无重叠区间
进阶题
- 跳跃游戏 II、435. 无重叠区间
复盘重点贪心策略为什么不会错,反例能否推翻当前策略
复盘重点
贪心策略为什么不会错,反例能否推翻当前策略
分治算法
项目内容识别信号问题可以拆成同类子问题,子问题结果能合并常用模板递归拆分、子问题求解、合并结果必刷题108. 将有序数组转换为二叉搜索树、148. 排序链表进阶题23. 合并 K 个升序链表、215. 数组中的第 K 个最大元素复盘重点递归出口、左右区间是否重叠、合并复杂度
项目内容
项目
内容
识别信号问题可以拆成同类子问题,子问题结果能合并
识别信号
问题可以拆成同类子问题,子问题结果能合并
常用模板递归拆分、子问题求解、合并结果
常用模板
递归拆分、子问题求解、合并结果
必刷题108. 将有序数组转换为二叉搜索树、148. 排序链表
必刷题
- 将有序数组转换为二叉搜索树、148. 排序链表
进阶题23. 合并 K 个升序链表、215. 数组中的第 K 个最大元素
进阶题
- 合并 K 个升序链表、215. 数组中的第 K 个最大元素
复盘重点递归出口、左右区间是否重叠、合并复杂度
复盘重点
递归出口、左右区间是否重叠、合并复杂度
拓扑排序
项目内容识别信号课程依赖、任务依赖、有向无环图、判断是否能完成常用模板入度数组 + 队列,或 DFS 三色标记必刷题207. 课程表进阶题210. 课程表 II、269. 火星词典复盘重点入度什么时候减,结果数量是否等于节点数量
项目内容
项目
内容
识别信号课程依赖、任务依赖、有向无环图、判断是否能完成
识别信号
课程依赖、任务依赖、有向无环图、判断是否能完成
常用模板入度数组 + 队列,或 DFS 三色标记
常用模板
入度数组 + 队列,或 DFS 三色标记
必刷题207. 课程表
必刷题
- 课程表
进阶题210. 课程表 II、269. 火星词典
进阶题
- 课程表 II、269. 火星词典
复盘重点入度什么时候减,结果数量是否等于节点数量
复盘重点
入度什么时候减,结果数量是否等于节点数量
并查集
项目内容识别信号连通性、分组、朋友圈、冗余边、等式关系常用模板find、union、路径压缩、按大小合并必刷题547. 省份数量进阶题684. 冗余连接、990. 等式方程的可满足性复盘重点find 是否路径压缩,什么时候判断冲突
项目内容
项目
内容
识别信号连通性、分组、朋友圈、冗余边、等式关系
识别信号
连通性、分组、朋友圈、冗余边、等式关系
常用模板find、union、路径压缩、按大小合并
常用模板
find、union、路径压缩、按大小合并
find
union
必刷题547. 省份数量
必刷题
- 省份数量
进阶题684. 冗余连接、990. 等式方程的可满足性
进阶题
- 冗余连接、990. 等式方程的可满足性
复盘重点find 是否路径压缩,什么时候判断冲突
复盘重点
find 是否路径压缩,什么时候判断冲突
find
位运算
项目内容识别信号奇偶、是否为 2 的幂、只出现一次、状态压缩常用模板异或、与运算清最低位 1、位掩码枚举必刷题136. 只出现一次的数字、231. 2 的幂进阶题191. 位 1 的个数、78. 子集复盘重点异或性质、n & (n - 1) 的含义、负数位表示
项目内容
项目
内容
识别信号奇偶、是否为 2 的幂、只出现一次、状态压缩
识别信号
奇偶、是否为 2 的幂、只出现一次、状态压缩
常用模板异或、与运算清最低位 1、位掩码枚举
常用模板
异或、与运算清最低位 1、位掩码枚举
必刷题136. 只出现一次的数字、231. 2 的幂
必刷题
- 只出现一次的数字、231. 2 的幂
进阶题191. 位 1 的个数、78. 子集
进阶题
- 位 1 的个数、78. 子集
复盘重点异或性质、n & (n - 1) 的含义、负数位表示
复盘重点
异或性质、n & (n - 1) 的含义、负数位表示
n & (n - 1)
复习路线入口
这篇文章只保留经典题型和题单推荐,7 天速刷和 30 天系统路线统一维护在算法面试复习总览。后续如果调整复习节奏,只需要更新总览页,避免多个题单里的路线表互相漂移。
写在最后
如果内容对你有帮助的话,欢迎顺手给 JavaGuide 点一个免费的 Star 支持一下:GitHub | Gitee。
JavaGuide 已持续维护近七年,累计 6100+ 次提交,来自 620+ 位贡献者共同完善。你的 Star、反馈和 PR,都是这个项目继续更新的动力。
如果你正在准备后端/AI 应用开发面试,也可以了解一下我的知识星球,里面包括后端和 AI 实战项目、简历优化、一对一提问和高频考点资料,已经持续维护六年。