一、数组与矩阵
1.1 高频题型
| 题型 |
例题 |
技巧 |
| 两数之和 |
Two Sum |
哈希表 |
| 区间合并 |
Merge Intervals |
排序+遍历 |
| 旋转数组 |
Search in Rotated Array |
二分查找 |
| 螺旋矩阵 |
Spiral Matrix |
模拟边界 |
| 最大子数组 |
Maximum Subarray |
动态规划/Kadane |
1.2 解题套路
- 排序:O(n log n) 预处理
- 双指针:有序数组相关
- 前缀和:子数组和问题
二、链表
2.1 高频题型
| 题型 |
例题 |
| 反转链表 |
Reverse Linked List |
| 检测环 |
Linked List Cycle |
| 合并有序链表 |
Merge Two Sorted Lists |
| 重排链表 |
Reorder List |
| K个一组反转 |
Reverse Nodes in k-Group |
2.2 解题套路
- 快慢指针:环、中点
- 虚拟头节点:统一操作
- 递归:反转、合并
三、二叉树
3.1 高频题型
| 题型 |
例题 |
方法 |
| 遍历 |
前中后序 |
递归/迭代 |
| 层序遍历 |
Binary Tree Level Order |
BFS |
| 最近公共祖先 |
Lowest Common Ancestor |
DFS |
| 路径和 |
Path Sum |
DFS |
| 序列化 |
Serialize and Deserialize |
前序+递归 |
3.2 解题套路
- 递归万能框架:前序/中序/后序位置
- BFS:层相关、最短路径
四、动态规划
4.1 高频题型
| 题型 |
状态定义 |
转移方程 |
| 背包问题 |
dp[i][j] |
选/不选 |
| 股票买卖 |
每天状态 |
状态机 |
| 最长公共子序列 |
dp[i][j] |
相等/不相等 |
| 编辑距离 |
dp[i][j] |
增删改 |
| 打家劫舍 |
dp[i] |
偷/不偷 |
4.2 解题步骤
- 确定状态含义
- 推导转移方程
- 确定初始条件
- 确定遍历顺序
- 考虑空间优化
五、字符串
5.1 高频题型
| 题型 |
技巧 |
| 字符串匹配 |
KMP、Rabin-Karp |
| 最长回文子串 |
中心扩展、Manacher |
| 单词拆分 |
动态规划 |
| 异位词 |
哈希表、字符计数 |
六、图
6.1 高频题型
| 题型 |
算法 |
| 拓扑排序 |
Kahn/DFS |
| 最短路径 |
Dijkstra/BFS |
| 连通分量 |
DFS/并查集 |
| 最小生成树 |
Prim/Kruskal |
七、系统设计中的算法
7.1 常见场景
- 一致性哈希:环+虚拟节点
- 布隆过滤器:位数组+多哈希
- LRU缓存:HashMap + 双向链表
- TopK:堆/快速选择
八、面试策略
8.1 沟通技巧
- 先理解题意,确认边界条件
- 说出暴力解法,再优化
- 写代码前先说明思路
- 主动分析复杂度
8.2 代码规范
九、总结
算法面试的核心是思路清晰 + 代码正确。将题目按类型归类,总结每类的解题模板,遇到新题先归类再套用。持续练习是提升的唯一途径。