经典算法思想总结(含 LeetCode 题目推荐)
这份题单按算法思想而不是题号组织,覆盖面试中最常考的九类方法。每道题只回答三个问题:它训练什么能力、难度如何、值不值得先做。必做题用来建立模板手感,选做题用来检验迁移能力。
使用方式
先确认自己能默写对应方法的核心代码,再动手表里的必做题;选做题放到第二轮复习。每做完一题,记录四件事:题目的识别信号、循环或递归的不变量、时间空间复杂度、卡住自己的边界样例。说不清这四点,等于没做。
二分查找
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 704. 二分查找 | 简单 | 必做 | 固定区间定义,练循环条件与边界更新的一致性 |
| 34. 在排序数组中查找元素的第一个和最后一个位置 | 中等 | 必做 | 在基础模板上改造出左边界、右边界两种查找 |
| 35. 搜索插入位置 | 简单 | 选做 | 理解循环结束时指针位置的含义 |
| 875. 爱吃香蕉的珂珂 | 中等 | 选做 | 把”最小可行速度”抽象成单调判定,入门答案二分 |
双指针与滑动窗口
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 26. 删除有序数组中的重复项 | 简单 | 必做 | 读写指针分工,理解原地覆盖 |
| 977. 有序数组的平方 | 简单 | 必做 | 利用”两端绝对值最大”从后向前填充 |
| 15. 三数之和 | 中等 | 必做 | 排序加左右收缩,重点在去重逻辑 |
| 142. 环形链表 II | 中等 | 选做 | 快慢指针相遇点到入环口的推导 |
| 3. 无重复字符的最长子串 | 中等 | 必做 | 可变窗口何时扩右端、何时缩左端 |
| 76. 最小覆盖子串 | 困难 | 选做 | 窗口内计数状态的维护与匹配判断 |
DFS 与 BFS
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 102. 二叉树的层序遍历 | 中等 | 必做 | 队列按层扩展,学会统计层数 |
| 200. 岛屿数量 | 中等 | 必做 | 把网格当隐式图,练遍历加访问标记 |
| 994. 腐烂的橘子 | 中等 | 选做 | 多源 BFS 与扩散轮次统计 |
| 127. 单词接龙 | 困难 | 选做 | 把字符串变换建模为无权图最短路 |
回溯
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 78. 子集 | 中等 | 必做 | 每个元素”选与不选”的决策树 |
| 77. 组合 | 中等 | 必做 | 路径、选择列表、撤销选择的标准骨架 |
| 39. 组合总和 | 中等 | 选做 | 允许重复选取时的起始下标控制 |
| 51. N 皇后 | 困难 | 选做 | 约束检查与剪枝的完整演练 |
动态规划
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 70. 爬楼梯 | 简单 | 必做 | 状态定义与转移方程的最小实例 |
| 322. 零钱兑换 | 中等 | 必做 | 完全背包式最优化,理解初始化含义 |
| 300. 最长递增子序列 | 中等 | 必做 | 子序列 DP,弄清 dp[i] 到底代表什么 |
| 416. 分割等和子集 | 中等 | 选做 | 0-1 背包可行性版本与空间压缩 |
贪心
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 455. 分发饼干 | 简单 | 必做 | 排序后配对,体验贪心策略的成立条件 |
| 55. 跳跃游戏 | 中等 | 必做 | 维护最远可达边界这一不变量 |
| 435. 无重叠区间 | 中等 | 选做 | 按结束时间排序的经典区间贪心 |
| 45. 跳跃游戏 II | 中等 | 选做 | 分层扩展求最少步数,与 BFS 对照 |
图论与位运算
| 题目 | 难度 | 优先级 | 训练目标 |
|---|---|---|---|
| 207. 课程表 | 中等 | 必做 | 入度数组加队列的拓扑排序,同时学会判环 |
| 547. 省份数量 | 中等 | 必做 | 并查集 find/union 与路径压缩模板 |
| 684. 冗余连接 | 中等 | 选做 | 用并查集定位第一条成环边 |
| 136. 只出现一次的数字 | 简单 | 选做 | 异或的消去性质,位运算入门 |
刷题顺序建议
推荐顺序是:二分、双指针与滑动窗口、DFS/BFS、回溯、动态规划、贪心、图论与位运算。理由在于依赖关系:二分练边界控制的基本功,窗口与双指针复用这份基本功;回溯依赖 DFS 的熟练度;DP 往往需要先在回溯或记忆化搜索上体会”重复子问题”;贪心的证明意识又建立在已经见过最优子结构之后。
执行时每个主题先刷完必做列,再回头补选做列;同一主题内不要连刷超过三道相似题,隔几天脱离题解重写一遍,比追加新题更能检验是否真正掌握。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

