2026/10/23 2:20:13
网站建设
项目流程
07-00 算法与数据结构 · 总目录 本目录覆盖算法与数据结构的 22 个核心专题,从基础到进阶,配合完整的模板、题目和练习路线。
学习路径 入门阶段(打基础): → 01 数组与字符串 → 02 链表 → 03 栈与队列 → 04 哈希表 核心阶段(掌握模式): → 05 树与二叉树 → 06 图论 → 07 排序算法 → 08 二分查找 进阶阶段(组合技巧): → 09 双指针与滑动窗口 → 10 递归与回溯 → 11 动态规划-基础 高阶阶段(竞赛/面试压轴): → 12 动态规划-进阶 → 13 贪心算法 → 14 分治算法 → 15 位运算 → 16 数学与高级数据结构 → 17 线段树与树状数组 → 18 最小生成树与网络流 → 19 模拟与构造算法 → 20 字符串算法专题 → 21 数据结构设计模式文章索引 编号 文件 核心内容 关键算法/技巧 难度 01 数组与字符串 前缀和、差分、字符串匹配 前缀和、差分数组、中心扩展、Manacher、KMP、原地哈希 ★★★ 02 链表 指针操作、缓存设计 虚拟头节点、快慢指针、反转链表、LRU、归并排序 ★★ 03 栈与队列 单调性、嵌套处理 单调栈、单调队列、表达式求值、最小栈 ★★★ 04 哈希表 O(1) 查找、去重、缓存 查找配对、频率统计、滑动窗口+Map、布隆过滤器、LFU 缓存 ★★ 05 树与二叉树 遍历、BST、平衡树 DFS/BFS 遍历、BST 操作、AVL/红黑树、线段树、哈夫曼树 ★★★ 06 图论 遍历、最短路径、连通性 BFS/DFS、Dijkstra、拓扑排序、并查集、二分图、Tarjan、网格DFS ★★★★ 07 排序算法 9 大排序、稳定性 冒泡/选择/插入、归并/快排/堆排、计数/桶/基数 ★★ 08 二分查找 有序查找、二分答案 标准二分、边界二分、旋转数组、二分答案 ★★ 09 双指针与滑动窗口 对撞指针、窗口技巧 对撞双指针、快慢指针、固定/可变窗口 ★★ 10 递归与回溯 穷举搜索、排列组合 递归三要素、排列/组合/子集、N 皇后、迷宫问题 ★★★ 11 动态规划-基础 一维/二维 DP 背包、LCS、LIS、编辑距离、股票买卖 ★★★★ 12 动态规划-进阶 区间/树形/状压 DP 区间 DP、树形 DP、状压 DP、数位 DP、单调队列优化 DP ★★★★★ 13 贪心算法 局部最优推导全局 区间调度、霍夫曼编码、Jump Game、任务调度 ★★★ 14 分治算法 大问题分而治之 归并/快排分治、大数乘法、最近点对、Strassen ★★★ 15 位运算 位操作技巧 位操作基础、位运算优化、位掩码、快速幂 ★★ 16 数学与高级数据结构 数论、Trie、博弈论 数论基础、组合数学、Trie 字典树、博弈论、跳表、B+ 树 ★★★★ 17 线段树与树状数组 区间查询/更新 线段树、Lazy 标记、树状数组、逆序对 ★★★★ 18 最小生成树与网络流 MST、最短路、最大流 Kruskal/Prim、Bellman-Ford/SPFA、Edmonds-Karp/Dinic ★★★★★ 19 模拟与构造算法 直接模拟、构造解 方向数组、边界收缩、贪心构造、分治构造 ★★★ 20 字符串算法专题 AC 自动机、字符串哈希、后缀数组 AC 自动机、Rabin-Karp、后缀数组+LCP、Z-Algorithm ★★★★ 21 数据结构设计模式 区间合并、堆操作、设计模式 区间合并、Top K 堆、双堆中位数、K 路合并、懒删除堆 ★★★
知识点速查 数组与字符串(01) 知识点 复杂度 代表题 前缀和 O(n) 预处理, O(1) 查询 LC560 差分数组 O(1) 修改, O(n) 还原 LC1109 最长回文子串(中心扩展) O(n²) time, O(1) space LC5 最长回文子串(Manacher) O(n) time, O(n) space LC5 KMP 字符串匹配 O(n+m) time, O(m) space LC28, LC459 原地哈希(Cyclic Sort) O(n) time, O(1) space LC41
链表(02) 知识点 复杂度 代表题 虚拟头节点 O(n) time, O(1) space LC19, LC82 快慢指针(Floyd 判圈) O(n) time, O(1) space LC141, LC142 Floyd 判圈数学证明 O(n) time, O(1) space LC142 环入口 反转链表(迭代/递归) O(n) time, O(1)/O(n) space LC206, LC25 LRU 缓存(HashMap + 双向链表) O(1) time LC146 链表归并排序 O(n log n) time LC148
栈与队列(03) 知识点 复杂度 代表题 单调栈(下一个更大元素) O(n) time LC739, LC84 单调队列(滑动窗口最值) O(n) time LC239 双栈(表达式求值/嵌套解码) O(n) time LC150, LC394 最小栈(辅助栈) O(1) time LC155
哈希表(04) 知识点 复杂度 代表题 查找配对(complement) O(n) time LC1 频率统计 O(n) time LC49, LC242 滑动窗口 + Map O(n) time LC3, LC76 前缀和 + Map O(n) time LC560 摩尔投票(找众数) O(n) time, O(1) space LC169, LC229 布隆过滤器 O(k) time 分布式场景 LFU 缓存 O(1) time LC460
树与图(05-06) 知识点 复杂度 代表题 二叉树遍历(前/中/后/层序) O(n) time LC94, LC102 Morris 遍历(O(1) 空间) O(n) time, O(1) space LC94 优化版 BST 查找/插入/删除 O(log n) avg LC701, LC450 平衡二叉树判断 O(n) time LC110 二叉树直径 O(n) time LC543 路径总和 III(前缀和) O(n) time LC437 Dijkstra 最短路径 O((V+E) log V) LC743 Bellman-Ford/SPFA(负权边) O(V×E)/O(kE) LC787 拓扑排序(Kahn 算法) O(V+E) time LC207, LC210 二分图判断(染色法) O(V+E) time LC785 网格 DFS/BFS(岛屿系列) O(m×n) time LC200, LC695 Tarjan 算法(桥/割点) O(V+E) time 关键边、网络脆弱点 欧拉路径(Hierholzer) O(E log E) LC332 并查集(路径压缩+按秩合并) O(α(n)) ~ O(1) LC684, LC323
排序与二分(07-08) 知识点 复杂度 代表题 快速排序(随机化 pivot) O(n log n) avg LC912 归并排序 O(n log n) worst LC148 堆排序 O(n log n) worst, O(1) space LC215 希尔排序(Knuth 序列) O(n^(3/2)) 概念+实现 K 路归并(外部排序) O(n log k) LC23 逆序对(归并变形) O(n log n) 剑指 Offer 51 标准二分查找 O(log n) time LC704 二分答案 O(log(range) × check) LC410, LC875 三分查找(单峰最值) O(log(range)) 几何优化 实数精度二分 O(log(1/eps)) POJ 1064
双指针与回溯(09-10) 知识点 复杂度 代表题 对撞双指针(有序数组) O(n) time LC15, LC11 快慢指针(链表) O(n) time LC141, LC160 可变窗口滑动 O(n) time LC209 排列/组合/子集(回溯) O(2^n) ~ O(n!) LC46, LC77, LC78 N 皇后 O(n!) time LC51 解数独 O(9^(n×n)) 剪枝优 LC37 单词搜索(网格回溯) O(mn×4^L) LC79 记忆化搜索 O(state×action) Top-Down DP
动态规划(11-12) 知识点 复杂度 代表题 一维 DP(爬楼梯/打家劫舍) O(n) time LC70, LC198 Kadane 算法(最大子数组和) O(n) time, O(1) space LC53 网格 DP(路径/最小和) O(m×n) time LC62, LC64 博弈 DP(净胜分) O(n²) time LC877 二维 DP(LCS/编辑距离) O(m×n) time LC1143, LC72 背包问题(0-1/完全/多重) O(n×W) time LC416, LC322 区间 DP(石子合并) O(n³) time LC312 树形 DP(二叉树最大路径) O(n) time LC124 状压 DP(旅行商问题) O(n² × 2^n) time LC1879 数位 DP O(log n × state) LC357, LC233 DAG 上的 DP O(V+E) time LIS 本质 单调队列优化 DP O(n) time LC1425, LC862 斜率优化 DP(概念) O(n) time 竞赛级优化 单调队列优化 DP O(n) time LC1425, LC862
其他(13-19) 知识点 复杂度 代表题 贪心(区间调度) O(n log n) LC435 贪心(分发糖果-两次扫描) O(n) time LC135 分治(最近点对) O(n log n) 经典算法 分治(Karatsuba 大数乘法) O(n^1.585) 概念+实现 位运算(只出现一次的数字) O(n) time, O(1) space LC136, LC260 格雷编码 O(2^n) time LC89 BitSet/布隆过滤器 O(1) time 大数据去重 Trie 字典树 O(L) 插入/查询 LC208, LC211 数论(扩展欧几里得/逆元) O(log n) 线性同余方程 快速幂取模 O(log n) LC372 卡特兰数 O(n²) 递推 LC96, LC22 线段树(Lazy 标记) O(log n) 查询/更新 LC307, LC699 树状数组(BIT) O(log n) 更新/查询 LC315, LC493 MST(Kruskal/Prim) O(E log E) / O(E log V) LC1584 网络流(Edmonds-Karp) O(VE²) 最大流最小割 模拟(螺旋矩阵) O(m×n) time LC54, LC59 构造(漂亮数组) O(n log n) 分治 LC932 AC 自动机(多模式匹配) O(N+M) time 多模式串匹配 字符串哈希(Rabin-Karp) O(N) 预处理, O(1) 比较 LC1044 后缀数组(SA+LCP) O(N log N) 构建 最长重复子串 Z-Algorithm O(N) time LC1392, LC459 博弈论(Bash/Nim/SG) O(n) 时间判断 LC292, LC877 区间合并 O(N log N) time LC56, LC57 Top K 堆 O(N log K) time LC215, LC347 双堆找中位数 O(log N) 插入, O(1) 查询 LC295 K 路合并 O(N log K) time LC23
面试高频 TOP 20 排名 题目 分类 核心技巧 1 LC1 两数之和 哈希表 HashMap 查找配对 2 LC206 反转链表 链表 三指针迭代 3 LC21 合并两个有序链表 链表 虚拟头节点 + 归并 4 LC53 最大子数组和 数组 Kadane 算法 5 LC15 三数之和 数组/双指针 排序 + 双指针 6 LC20 有效的括号 栈 栈匹配 7 LC76 最小覆盖子串 滑动窗口 need[] + required 计数 8 LC200 岛屿数量 图论 DFS/BFS 淹没 9 LC146 LRU 缓存 链表/哈希表 HashMap + 双向链表 10 LC239 滑动窗口最大值 单调队列 单调递减队列 11 LC169 多数元素 摩尔投票 互相抵消 12 LC560 和为 K 的子数组 前缀和 presum + HashMap 13 LC739 每日温度 单调栈 单调递减栈 14 LC42 接雨水 双指针 维护左右最大值 15 LC84 柱状图最大矩形 单调栈 左右边界查找 16 LC322 零钱兑换 DP 完全背包 17 LC300 最长递增子序列 DP LIS + 二分优化 18 LC1143 最长公共子序列 DP 二维 DP 19 LC312 戳气球 DP 区间 DP 20 LC124 二叉树最大路径和 树形 DP 后序遍历 21 LC25 K 个一组翻转链表 链表 分组反转
算法复杂度基准 复杂度 适用规模 典型算法 O(1) 无限制 哈希表查找、位运算 O(log n) n ≤ 10^18 二分查找、快速幂 O(n) n ≤ 10^7 线性扫描、KMP、双指针 O(n log n) n ≤ 10^6 排序、归并、Dijkstra O(n²) n ≤ 5000 DP 二维表、暴力双指针 O(n³) n ≤ 500 区间 DP、Floyd O(2^n) n ≤ 25 状态压缩 DP O(n!) n ≤ 12 全排列、N 皇后