ALGORITHM COURSES
从一个想法,到一套解法。
每节课都从暴力出发:发现重复工作、建立不变量、逐步执行,最后用自测检验理解。
13 节课程
排序
冒泡排序
Bubble Sort反复比较相邻元素,把较大的值一步步推向右端。
排序
插入排序
Insertion Sort像整理手中的扑克牌,把新元素插入已经有序的前缀。
排序
归并排序
Merge Sort先把两半各自排好,再用双指针线性合并。
排序
快速排序
Quick Sort选一个基准,让较小值和较大值分居两边,再递归处理。
搜索
二分查找
Binary Search利用有序性,每次比较中点后排除一半不可能包含答案的区间。
数组技巧
滑动窗口
Sliding Window维护一个连续区间,让左右边界只向前移动,从而避免重复扫描。
图与搜索
广度优先搜索
Breadth-First Search用队列按距离一层层扩展,先处理离起点更近的节点。
图与搜索
深度优先搜索
Depth-First Search沿一条分支尽可能深入,再回到尚未探索的分支。
图与搜索
Dijkstra 最短路
Dijkstra反复确定当前最近的节点,再用它改善邻居的候选距离。
栈与队列
单调栈
Monotonic Stack让还没找到答案的元素有序等待,新元素到来时批量解决问题。
栈与队列
堆与优先队列
Heap只维护父子之间的局部顺序,就能快速取得全局极值。
图与搜索
并查集
Union Find通过集合代表快速判断两个节点是否连通,并合并它们所在的集合。
动态规划
动态规划入门
Dynamic Programming把重复出现的子问题只计算一次,再用已知答案构造更大的答案。