算法速通

二分法

滑动窗口

双指针

双指针完整笔记参见
🌐
双指针
双指针有:同向,相向,背向 三种。通常,二分法、单调栈、单调队列、滑动窗口、链表操作等都属于广义的双指针。其本质是维护一段区间。但此处的双指针更多特指以下三种情况
  • 维护一段区间的问题 26,283
  • 根据单调性不断缩减搜索空间的 11,825
  • 抽象为找链表环的问题 287,202
🦯
11. 盛最多水的容器
面积取决于指针的距离与值小的值乘积

前缀和 & 差分

前缀和 & 差分速通 完整笔记参见
🎾
前缀 & 差分
前缀和 以及 差分算是 写题的简单技巧,尤其是在维护区间和的题目上,该技巧常与二分法、滑动窗口等题型相结合。此外,前缀和的技巧不仅可以应用于数组上,还经常应用与二叉树、链表中。

链表

二叉树

图完整笔记参见
🧫
考察点主要有四部分:拓扑排序,BFS,DFS,并查集 (后三部分有各自专题)
💡
可以用拓扑排序判断有没有环 BFS一般用迭代,DFS一般写递归 一般用Dijkstra 做follow up,记住每次选择最短的路径,可以同优先队列来实现

排序算法

排序算法完整笔记参见
⛸️
排序算法
常考的包括:快速排序,归并排序,堆排序,桶排序(计数排序)等。

🏍️
作为一种常用的数据结构,只需要谨记 先入后出 这一条特性;大多题目都是利用了这一条性质作为突破口的。

单调栈

BFS & DFS

均为搜索算法。
🌔
BFS
通常只有迭代一种模板,只不过有双向BFS和单向BFS;
🎋
DFS & 回溯
包括迭代和递归两种版本。另外,BFS通常需要在入队列的时候标记而不能是出队列的时候标记,只有在入队列的时候标记才能防止重复节点入队。该类型题目注意时间复杂度分析
注:回溯是一种更加通用的算法,DFS是一种与一种树相关的特定的回溯形式,DFS是在逻辑树是回溯。

动态规划

单调队列速通

🧽
单调队列
常用来维护数据流中的最大值or最小值。最大值或者最小值还是放在队列首部的。
💷
862. 和至少为 K 的最短子数组
209的升级版,想清楚为什么是递增队列?只有维持的是递增队列,才能在左出队的时候,可能更新结果

扫描线速通

🚞
扫描线
,一种简单灵活的算法,经典题目打气球以及多种区间题目。

前缀树速通

🏷️
前缀树(Trie树)
一种特殊的数据结构。要捋清楚 每个节点的结构。每个节点上有一个 额外的标签,用来标记该节点以上的路径的信息!前缀树上的DFS,insert的操作相当于在建立一棵树,至于怎么在树上遍历完全根据题目来决定。

优先队列 & 多路归并

并查集

💫
并查集
用于处理集合的合并和查询。其时间复杂度,在加上rank和路径压缩优化后为 log* n, 叫做 Iterated logarithm ,近似O(1) 的 。O(log* n) 是比O(log n) 还要快,近似等于O(1),比O(1)慢一点。

树形数组

位运算

小众算法