算法面试突击手册 —— 总目录
覆盖 LeetCode Hot 100 全部核心题型,按算法类型分类,手撕代码级深度讲解。
使用指南
- 按类型系统学习:每天攻克 1-2 个类型,先看「概念与特点」建立直觉,再精讲每道题
- 重点看解题分析:理解”为什么用这种方法”比背代码重要 10 倍
- 配合记忆口诀:每题尽量给出口诀,面试紧张时靠口诀唤醒思路
- 默写关键代码:每题看完后关掉文件,自己手写一遍
目录总览
各类型题目清单
01 哈希表(5 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 1 | Two Sum 两数之和 | 🟢 | HashMap 存 value→index |
| 49 | Group Anagrams 字母异位词分组 | 🟡 | 排序后做 key / 字符计数做 key |
| 128 | Longest Consecutive Sequence 最长连续序列 | 🟡 | HashSet + 只从起点开始计数 |
| 136 | Single Number 只出现一次的数字 | 🟢 | 异或运算 |
| 169 | Majority Element 多数元素 | 🟢 | 摩尔投票 / HashMap 计数 |
02 双指针(5 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 283 | Move Zeroes 移动零 | 🟢 | 快慢指针交换 |
| 11 | Container With Most Water 盛最多水的容器 | 🟡 | 左右夹逼 |
| 15 | 3Sum 三数之和 | 🟡 | 排序 + 固定一个 + 双指针 |
| 42 | Trapping Rain Water 接雨水 | 🔴 | 左右双指针 + 维护两边最大高度 |
| 75 | Sort Colors 颜色分类 | 🟡 | 三路快排(荷兰国旗) |
03 滑动窗口(4 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 3 | Longest Substring Without Repeating Characters | 🟡 | HashSet + 右扩左缩 |
| 438 | Find All Anagrams in a String | 🟡 | 固定窗口 + 字符计数数组 |
| 76 | Minimum Window Substring | 🔴 | 可变窗口 + need/have 计数器 |
| 239 | Sliding Window Maximum | 🔴 | 单调队列(双端队列) |
04 前缀和(3 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 560 | Subarray Sum Equals K | 🟡 | 前缀和 + HashMap 记录出现次数 |
| 238 | Product of Array Except Self | 🟡 | 前缀积 × 后缀积 |
| 437 | Path Sum III 路径总和 III | 🟡 | 树上前缀和 + HashMap |
05 栈与单调栈(6 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 20 | Valid Parentheses 有效的括号 | 🟢 | 栈匹配括号 |
| 155 | Min Stack 最小栈 | 🟡 | 辅助栈存最小值 |
| 394 | Decode String 字符串解码 | 🟡 | 双栈(数字栈 + 字符串栈) |
| 739 | Daily Temperatures 每日温度 | 🟡 | 单调递减栈 |
| 84 | Largest Rectangle in Histogram | 🔴 | 单调递增栈 + 哨兵 |
| 32 | Longest Valid Parentheses | 🔴 | 栈存下标 / DP |
06 二分查找(6 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 35 | Search Insert Position | 🟢 | 标准二分模板 |
| 74 | Search a 2D Matrix | 🟡 | 二维坐标 → 一维下标 |
| 34 | Find First and Last Position | 🟡 | 左边界 + 右边界二分 |
| 33 | Search in Rotated Sorted Array | 🟡 | 判断哪半有序 |
| 153 | Find Minimum in Rotated Sorted Array | 🟡 | 找旋转点 |
| 4 | Median of Two Sorted Arrays | 🔴 | 二分较短数组的划分位置 |
07 排序(5 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 215 | Kth Largest Element 数组中的第K个最大元素 | 🟡 | 快速选择 |
| 56 | Merge Intervals 合并区间 | 🟡 | 按起点排序后合并 |
| 347 | Top K Frequent Elements 前K个高频元素 | 🟡 | 桶排序 / 堆 |
| 148 | Sort List 排序链表 | 🟡 | 归并排序 |
| 31 | Next Permutation 下一个排列 | 🟡 | 找规律(从右找第一个降序位) |
08 链表(12 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 160 | Intersection of Two Linked Lists | 🟢 | 双指针走完对方的路 |
| 206 | Reverse Linked List | 🟢 | 迭代/递归反转 |
| 234 | Palindrome Linked List | 🟢 | 快慢指针 + 反转后半段 |
| 141/142 | Linked List Cycle I & II | 🟢/🟡 | 快慢指针 / Floyd判圈 |
| 21 | Merge Two Sorted Lists | 🟢 | 归并思想 |
| 2 | Add Two Numbers | 🟡 | 模拟加法 + 进位 |
| 19 | Remove Nth Node From End | 🟡 | 快慢指针间隔 n |
| 24 | Swap Nodes in Pairs | 🟡 | 迭代/递归交换 |
| 25 | Reverse Nodes in k-Group | 🔴 | 分组反转 |
| 138 | Copy List with Random Pointer | 🟡 | 节点插入法 / HashMap |
| 23 | Merge k Sorted Lists | 🔴 | 归并 / 堆 |
| 146 | LRU Cache | 🟡 | HashMap + 双向链表 |
09 二叉树(17 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 94 | Binary Tree Inorder Traversal | 🟢 | 递归 / 栈模拟中序 |
| 104 | Maximum Depth of Binary Tree | 🟢 | DFS 后序 / BFS 层数 |
| 226 | Invert Binary Tree | 🟢 | 递归交换左右 |
| 101 | Symmetric Tree | 🟢 | 双指针递归比较 |
| 543 | Diameter of Binary Tree | 🟢 | 后序求深度 + 更新直径 |
| 102 | Level Order Traversal | 🟡 | BFS 队列 |
| 108 | Sorted Array to BST | 🟢 | 二分中点做根 |
| 98 | Validate BST | 🟡 | 中序 / 递归传范围 |
| 230 | Kth Smallest in BST | 🟡 | 中序遍历计数 |
| 199 | Right Side View | 🟡 | BFS 取每层最后一个 |
| 114 | Flatten to Linked List | 🟡 | 后序展开 |
| 105 | Construct from Preorder/Inorder | 🟡 | 递归划分子树 |
| 236 | Lowest Common Ancestor | 🟡 | 后序查找 |
| 124 | Max Path Sum | 🔴 | 后序 + 维护全局最大 |
| 538 | Convert BST to Greater Tree | 🟡 | 反向中序(右→根→左) |
| 617 | Merge Two Binary Trees | 🟢 | 同步递归 |
| 297 | Serialize/Deserialize | 🔴 | 前序序列化 |
10 回溯(9 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 46 | Permutations 全排列 | 🟡 | 回溯 + used 标记 |
| 78 | Subsets 子集 | 🟡 | 选/不选 回溯 |
| 17 | Letter Combinations | 🟡 | 回溯多叉树 |
| 39 | Combination Sum 组合总和 | 🟡 | 可重复选 + startIndex |
| 22 | Generate Parentheses 括号生成 | 🟡 | 左/右括号计数剪枝 |
| 79 | Word Search 单词搜索 | 🟡 | 二维回溯 + 标记访问 |
| 131 | Palindrome Partitioning | 🟡 | 回溯 + 判断回文 |
| 51 | N-Queens N皇后 | 🔴 | 回溯 + 对角线剪枝 |
| 494 | Target Sum 目标和 | 🟡 | 回溯 / 转 DP |
11 动态规划(18 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 70 | Climbing Stairs 爬楼梯 | 🟢 | 斐波那契 DP |
| 198 | House Robber 打家劫舍 | 🟡 | 状态机 DP |
| 53 | Maximum Subarray | 🟡 | Kadane 算法 |
| 62 | Unique Paths 不同路径 | 🟡 | 二维网格 DP |
| 64 | Minimum Path Sum 最小路径和 | 🟡 | 二维网格 DP |
| 322 | Coin Change 零钱兑换 | 🟡 | 完全背包 DP |
| 279 | Perfect Squares 完全平方数 | 🟡 | 类似零钱兑换 |
| 139 | Word Break 单词拆分 | 🟡 | 区间 DP(子串判断) |
| 300 | Longest Increasing Subsequence | 🟡 | DP + 二分优化 |
| 152 | Maximum Product Subarray | 🟡 | 正负维护双状态 |
| 416 | Partition Equal Subset Sum | 🟡 | 0-1 背包 |
| 5 | Longest Palindromic Substring | 🟡 | 中心扩散 / 区间 DP |
| 72 | Edit Distance 编辑距离 | 🔴 | 字符串 DP |
| 10 | Regular Expression Matching | 🔴 | 字符串 DP |
| 121 | Stock I 买卖股票最佳时机 | 🟢 | 贪心 / DP |
| 309 | Stock with Cooldown | 🟡 | 状态机 DP |
| 337 | House Robber III | 🟡 | 树形 DP |
| 312 | Burst Balloons 戳气球 | 🔴 | 区间 DP |
| 96/118 | Unique BST / Pascal Triangle | 🟡/🟢 | 卡特兰数 / 递推 |
12 贪心(5 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 121 | Best Time to Buy and Sell Stock | 🟢 | 贪心维护最低价 |
| 55 | Jump Game 跳跃游戏 | 🟡 | 贪心维护最远可达 |
| 45 | Jump Game II | 🟡 | 贪心分层跳跃 |
| 763 | Partition Labels | 🟡 | 记录最后出现位置 |
| 406 | Queue Reconstruction by Height | 🟡 | 排序 + 贪心插入 |
13 图(6 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 200 | Number of Islands | 🟡 | DFS/BFS 沉岛 |
| 207 | Course Schedule | 🟡 | 拓扑排序 / BFS 入度 |
| 208 | Implement Trie | 🟡 | 多叉树实现前缀树 |
| 399 | Evaluate Division | 🟡 | 带权并查集 / BFS |
| 994 | Rotting Oranges | 🟡 | 多源 BFS |
| 695 | Max Area of Island | 🟡 | DFS 求连通面积 |
14 堆(5 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 215 | Kth Largest Element | 🟡 | 小根堆 O(nlogk) |
| 347 | Top K Frequent Elements | 🟡 | 小根堆 / 桶排序 |
| 295 | Find Median from Data Stream | 🔴 | 双堆(大根堆 + 小根堆) |
| 239 | Sliding Window Maximum | 🔴 | 大根堆存值和下标 |
| 23 | Merge k Sorted Lists | 🔴 | 小根堆多路归并 |
15 矩阵/多维数组(6 题)
| 题号 | 题名 | 难度 | 核心技巧 |
|---|
| 73 | Set Matrix Zeroes 矩阵置零 | 🟡 | 第一行/列做标记 |
| 54 | Spiral Matrix 螺旋矩阵 | 🟡 | 四边界收缩 |
| 48 | Rotate Image 旋转图像 | 🟡 | 转置 + 水平翻转 |
| 240 | Search a 2D Matrix II | 🟡 | 从右上角搜索 |
| 85 | Maximal Rectangle 最大矩形 | 🔴 | 转成柱状图最大矩形 |
| 221 | Maximal Square 最大正方形 | 🟡 | DP / 转柱状图 |
刷题路线建议
Week 1: 哈希表 → 双指针 → 滑动窗口 → 前缀和
Week 2: 栈与单调栈 → 二分查找 → 排序
Week 3: 链表全部
Week 4: 二叉树(前 10 题)→ 二叉树(后 7 题)
Week 5: 回溯全部
Week 6: DP 一维 → DP 二维/背包
Week 7: DP 区间/树形 → 贪心
Week 8: 图 → 堆 → 矩阵 → 综合复习
🎯 目标:8 周后,Hot 100 任何一道题,5 分钟内能写出正确思路,15 分钟内能写出正确代码。