1. sliding window(two pointers)
1.1. fixed size
1.2. non-fixd size
1.2.1. 最長 subarray
1.2.2. 最短 subarray
1.2.3. #subarray
1.3. 越短越合法(求最長/最大)
1.4. 越長越合法(求最短/最小)
1.5. #subarray
2. binary search
2.1. search by value
2.1.1. minimize max value
2.1.1.1. 讓 >= x 的都符合要求
2.1.2. maximize min value
2.1.2.1. 讓 <= x 的都符合要求
2.1.3. 二分間接值
2.1.4. 第 k 大
2.1.4.1. guess x → st. nums[i] >= x 的 i 至少有 k 個 (同 minimize max value)
3. monotonic stack
3.1. 矩形
3.2. 貢獻法
3.3. 最小字典序
4. 網格
4.1. DFS
4.1.1. connected component 的個數 & 大小
4.1.2. BFS
4.1.2.1. 最短距離!!!!
4.1.2.1.1. 818 race car
4.1.3. 01 BFS
4.1.3.1. edge weight 只有 0, 1
4.1.4. Dijkstra
5. bit manipulation
5.1. simple
5.1.1. find duplicate
5.2. xor
5.3. and, or
5.4. logtrick
5.5. 拆位、貢獻法
5.6. 試算
5.7. 恆等
6. graph
6.1. DFS
6.1.1. #connected components
6.1.2. cycle
6.2. BFS
6.2.1. 最短路徑 (edge = 1)
6.3. topological sort
6.4. topological sort + dp
6.5. shortest path
6.5.1. single source
6.5.1.1. dijkstra
6.5.2. multi sources
6.5.2.1. floyd
6.6. minimun spanning tree (Union Find)
7. DP
7.1. 爬樓梯
7.2. 打家劫舍
7.3. max subarray
7.3.1. kadane
7.4. 網格 dp
7.5. 01 背包
7.6. 完全背包
7.7. 分組背包
7.8. LCS
7.9. LIS
7.9.1. 可用 binary search 解
7.10. 劃分型 dp
7.11. state dp
7.11.1. 股票
7.11.2. play the piano
7.12. 線性 dp
7.12.1. 與前後綴轉移有關,通常回傳 f[-1] or f[0]
7.12.2. 1d dp
7.12.3. 不相交區間
7.12.4. 子數組 dp
7.12.5. 合法 subsequence
7.12.6. 子矩形
7.12.7. 多維
7.13. 區間 dp
7.13.1. 左右端點不斷縮小,通常回傳 f[0][n-1]
7.13.2. i 倒敘枚舉,j要正序枚舉
7.13.3. 最長回文 subsequence
7.13.4. 區間
7.13.4.1. trianglize a polygan
7.14. 狀壓 dp
7.14.1. 相鄰無關
7.14.2. 相鄰相關
7.14.3. 旅行商
7.14.4. 子集
7.14.5. sos dp
7.15. digit dp
7.15.1. 創建一個數
7.15.2. ab 兩數相加 = c,求 a,b 的組合個數
7.16. dp 優化
7.16.1. prefix sum
7.16.2. monotonic stack
7.16.3. monotonic queue
7.17. 其他
7.17.1. 圖 dp
7.17.2. 博弈 dp
7.17.3. 期望值 dp
8. greedy
8.1. 從最小/大的元素開始 greedy
8.1.1. 通常與元素順序無關 → sort()
8.2. 單序列配對
8.3. 雙序列配對
8.4. 從最左/右開始 greedy
8.5. 劃分型 dp
8.6. 先枚舉再貪心
8.7. 交換論證法
8.7.1. 證明不會後悔
8.8. 相鄰不同
8.9. 反悔 greedy
8.10. 區間 greedy
9. backtracking
9.1. 子集型
9.1.1. 選 or 不選
9.1.2. 枚舉選哪個
9.2. 劃分型
9.2.1. 把分割線看成 "選 or 不選"
9.2.2. 本質上也是子集型
9.3. 組合型
9.3.1. 本質上也是子集
9.4. 排列型
9.4.1. 全排列
9.4.2. n 皇后
10. intervals
10.1. sort by start time
10.1.1. min number of intervals to cover the whole range
10.2. sort by end time
10.2.1. max number of intervals that are non-overlapping (remove as less intervals as possible)
10.3. line sweep
10.3.1. 本質上是 diff arrry
11. 常用 data structure
11.1. 枚舉右,維護左
11.1.1. hash map
11.1.2. mono queue
11.2. 枚舉中間
11.2.1. for 3 ~ 4 個變量
11.3. prefix sum
11.3.1. prefix sum + hash table
11.3.2. prefix sum + sorted list
11.3.3. 2d prefix sum
11.4. 距離和
11.5. prefix xor sum
11.6. diff array
11.7. stack
11.7.1. stack
11.7.2. monotonic stack
11.8. queue
11.8.1. queue
11.8.2. mono queue
11.9. heap/priority queue
11.9.1. 第 k 大/小
11.9.2. 反悔 heap
11.9.3. lazy delete heap
11.9.4. 對頂 heap
11.9.5. tasks scheduling
11.10. trie
11.11. union find
11.11.1. union find
11.11.2. gcd union find
11.12. BIT / segment tree
11.12.1. sgement tree (無更新)
11.12.2. lazy segment tree (有區間更新)