学习算法的目的是为了进行思维训练
数据结构篇
数据结构就是一套用于维护原结构部分信息的算法
- 单调栈:寻找序列左边比当前元素小/大的最近元素
- 单调队列:滑动窗口最大值
- 前缀和/差分/线段树:维护一维区间统计信息
- treap:严格logn的集合
- trie:字符串集合,字符串映射,最大异或和
- kmp/ac自动机:字符串匹配/多模式串的字符串匹配
算法篇
策略,数学
寻找问题的可能解空间,优化问题的可能解空间,寻找遍历解空间的方式/顺序,优化遍历策略(包括剪枝,利用之前阶段的信息)
暴力
- bfs:遍历,暴搜,最短路
- dfs:遍历,枚举,暴搜
- 各种优化版dfs/bfs:A*, IDA*等
基础算法
- qsort:排序,第k大/小元素,中位数
- mergesort:排序,逆序数
- 离散化
动态规划
- 线性DP
- 背包问题
- 树状dp
- …
贪心
- 货仓选址
图论
- dijkstra/spfa/floyd: 最短路
- prim/kruskal:最小生成树
- 染色法/匈牙利算法:二分图判定/匹配
数论
- gcd/lcm:最大公约数,最小公倍数
素性检测:…分解质因数:…
Leetcode篇
Leetcode涉及到的算法部分较少,大部分都是模拟题,但会涉及到一些技巧
Leetcode上的大部分题代码难度都很低,但也存在部分题思维比较跳跃
链上算法
树上算法
- 树上递归
树上递归的特殊点在于树本身就具有递归结构,大部分情况下自底向上回溯时甚至不需要备忘录树的直径
最近公共祖先
图上算法
其他专题
- 木桶原理
直方图最大雨量
雨水