这是一套按技法拆分的 LeetCode 学习文档,每篇文章深入讲解一种算法思想。
文档使用方式
- 遇到题目先判断题型,跳转对应文档
- 先看"30 秒速览"和"直觉建立"
- 理解核心原理和模板
- 做典型例题,理解易错点
- 用复盘清单自检
文章目录
数组与查找
| 技法 | 文章 | 核心内容 |
|---|---|---|
| 二分查找 | lc-binary-search | 红蓝染色法、开区间模板、二分答案 |
| 双指针 | lc-two-pointers | 相向/同向/快慢指针、三数之和 |
| 滑动窗口 | lc-sliding-window | 求最长 vs 求最短、更新时机 |
| 前缀和与差分 | lc-prefix-sum | 区间和 O(1) 查询、差分数组 |
基础数据结构
| 技法 | 文章 | 核心内容 |
|---|---|---|
| 哈希表 | lc-hash-map | 查找、计数、分组三大场景 |
| 链表 | lc-linked-list | 虚拟头、反转、快慢指针 |
| 栈 | lc-stack | 括号匹配、单调栈 |
| 队列与堆 | lc-queue-heap | 单调队列、Top K、对顶堆 |
| 字典树 | lc-trie | 前缀匹配、词频统计 |
字符串
| 技法 | 文章 | 核心内容 |
|---|---|---|
| 字符串基础 | lc-string-basics | KMP、回文、大数运算 |
树与图
| 技法 | 文章 | 核心内容 |
|---|---|---|
| 二叉树 | lc-binary-tree | 递归三要素、遍历、路径问题 |
| DFS 与 BFS | lc-dfs-bfs | 搜索模板、最短路径 |
| 图论基础 | lc-graph-basics | 拓扑排序、并查集 |
| 最短路径 | lc-shortest-path | Dijkstra、Bellman-Ford、Floyd |
搜索与回溯
| 技法 | 文章 | 核心内容 |
|---|---|---|
| 回溯 | lc-backtracking | 排列/组合/子集、剪枝去重 |
动态规划
| 技法 | 文章 | 核心内容 |
|---|---|---|
| DP 入门 | lc-dp-intro | DP 五步法、线性/网格 DP |
| 背包问题 | lc-dp-knapsack | 01 背包、完全背包 |
| 子序列 DP | lc-dp-subsequence | LIS、LCS、编辑距离 |
| 区间 DP | lc-dp-interval | 回文 DP、区间合并 |
| 状态机 DP | lc-dp-state-machine | 股票系列、打家劫舍 |
高级技法
| 技法 | 文章 | 核心内容 |
|---|---|---|
| 贪心 | lc-greedy | 区间调度、跳跃游戏、股票 |
| 位运算 | lc-bit-manipulation | 异或、位操作、状态压缩 |
统一解题流程
1) 识别题型信号
- 数组有序或有单调性 → 二分
- 需要同时考虑两端 → 双指针
- 连续子数组/子串 → 滑动窗口
- 频繁区间和查询 → 前缀和
- 需要快速查找 → 哈希表
- 字符串匹配 → KMP/字典树
- 树形结构 → 递归/DFS/BFS
- 图关系 → DFS/BFS/并查集/拓扑排序
- 求所有方案 → 回溯
- 最值+重叠子问题 → DP
- 每步局部最优 → 贪心
- 位操作/状态压缩 → 位运算
2) 套用模板
每种技法都有标准模板,先背模板,再理解原理。
3) 注意边界
- 空输入
- 单元素
- 所有元素相同
- 负数(滑动窗口失效)
- 大数/溢出
4) 复盘总结
每篇文章末尾都有复盘清单,做完题后自检。
学习建议
- 按顺序学:数组 → 数据结构 → 字符串 → 树图 → 搜索 → DP → 高级
- 先理解再写代码:不要背题,理解思想
- 画图:链表、树、DP 都要画图
- 总结模板:建立自己的模板库
- 定期复习:遵循遗忘曲线
文章统计
- 总计:23 篇文章
- 覆盖:数组、字符串、链表、树、图、DP、贪心、位运算等核心技法
- 每篇包含:30 秒速览、直觉建立、核心原理、典型例题、易错点、复盘清单、题目清单