| 双指针 | 有序数组求两数之和、三数之和、去重、滑动窗口类问题的通用套路 |
| 滑动窗口 | 维护一个可变区间的状态,右扩左缩,把 O(n²) 降到 O(n) |
| 前缀和 / 差分 | 前缀和 O(1) 求区间和;差分 O(1) 做区间加,最后还原 |
| 分治 Divide and Conquer | 拆分 → 递归求解 → 合并,代表是归并排序与快排 |
| 贪心 Greedy | 每步取局部最优;能用必须证明「局部最优可推出全局最优」,否则要用 DP |
| 回溯 Backtracking | DFS 枚举 + 剪枝 + 撤销选择,用于全排列、组合、子集、N 皇后 |
| 剪枝 | 提前排除不可能的分支:排序后提前终止、记忆化、可行性上下界 |
| 动态规划 DP | 有重叠子问题与最优子结构时,用状态 + 转移 + 边界求解 |
| DP 解题四步 | 定义状态 → 写转移方程 → 定初值与边界 → 定遍历顺序 |
| 记忆化搜索 | 递归 + 缓存,是 DP 的自顶向下写法,思维负担小 |
| 01 背包 / 完全背包 | 每件物品取或不取 / 可取无限次;01 背包容量维度必须逆序以复用上一行 |
| 最长公共子序列 LCS | 双序列 DP 的样板题,dp[i][j] 表示前 i、前 j 个的最优解 |
| 编辑距离 | 双序列 DP,插入/删除/替换三种转移取最小 |
| 状态压缩 DP | 用位运算表示集合状态,适用于 n ≤ 20 的集合类问题 |
| 位运算技巧 | n & (n-1) 消掉最低位的 1、n & -n 取最低位 1、异或可找出只出现一次的数 |