基础数据结构
- 数组/栈/队列
- 哈希表:原地哈希
- 字符串
- 链表
- 堆
- 单调栈/单调队列
- B树/B+树/红黑树
工程类
设计并实现一些基础数据结构或工程组件。
排序及衍生
- 4种基础排序:bubble sort,selection sort,insertion sort,希尔
- 3种基于比较的:quick sort(quick select & prefect shuffle),堆排,merge sort
- 3种不基于比较的:计数,基数,桶排
字符串
- KMP
- Manacher
- AC自动机
链表
- 单链表,双链表反转
- 链表是否有环,环的入口
- 链表相交
- sort list
二分
- standard
- lower_bound/upper_bound
贪心
自求多福,策略太多
树
- 二叉树前序/中序/后序的递归和非递归遍历, 层次遍历, Morris遍历
- 序列化和反序列化
- BST问题
- 树状数组BIT
- 线段树
- backtracking:排列,组合,子集
- 树型暴搜:1:20:00开始
双指针
- 快慢指针
- 滑动窗口
- 首尾指针:
剑指81:不要求相对位置,首尾指针/快慢指针(快排思想)
剑指21:要求相对位置不变,辅助数组/插入/冒泡
图
- 并查集
- 图的表示和转换,建图
- 图的DFS/BFS遍历
- 最小生成树:Kruskal和Prim
- 最短路径:Dijkstra和堆优化,Floyd-Warshall,Bellman-Ford,A*
- 拓扑排序:BFS和DFS
- Cycle Detection
- 有向图强连通分量:Tarjan's Algorithm
动态规划
- 背包问题
- 编辑距离
- LCS/LIS/最长回文子序列/子串
- 最大子序和
- 股票问题
- 区间DP
- 状态压缩
数学
大数据
技巧
- 矩阵处理,1:25:00开始,矩阵旋转90/180/270,转置
- 前缀和:原始数组不变,频繁查询区间累加和,二维前缀和
- 差分数组:频繁对原始数组的区间进行增减
- 对拍
- 打表找规律:数学规律题,输入输出都很简单如
int