01概述 · 类型
- 复杂度比较类:先写清最好 / 平均 / 最坏,平均必须带分布或随机化前提。大 O 是上界。
- 递归与迭代改写类:递归深度可能到 n,空间不是「免费」。若用显式栈模拟递归,须计入额外栈空间;能直接改成普通循环的不一定需要栈(可能 O(1) 额外空间)。
03栈与队列 · 类型
- 两栈实现队列:两个 LIFO 对倒模拟 FIFO,均摊转移,单次最坏仍可 O(n)。摊还不是平均。
- 队列实现栈:用 FIFO 队列——单队列入队后把旧元素转到队尾,或双队列来回搬运。不要写成「两个 LIFO」。
- 括号 / 配对类:遇开入栈、遇闭看栈顶是否匹配。栈是 LIFO。
- 循环队列满空类:空 front==rear;满 (rear+1)%M==front(浪费一格)。不要写成「牺牲元素以外的另一种满」还不声明。
04串 · 类型
- 朴素匹配复杂度类:设 1≤m≤n。最坏 Θ((n−m+1)m);最好成功匹配第一次对齐就成功时 Θ(m),不是无条件最好。
- KMP next 类:本站用严 1 下标,next[1]=0。abaabc → 0 1 1 2 2 3。next 与 nextval 分开声明。
05树 · 类型
- 遍历与重建类:前序+中序或后序+中序可重建(无重复键)。层序是队列,不是递归栈的另一种名字。
- 完全二叉树下标类:1 下标,左子 2i 当 2i≤n,右子 2i+1 当 2i+1≤n。根在第 1 层。n0=n2+1 只对非空二叉树。
章末自测
不能。这里只有类型与口径。题面与讲解在正版书里;模式展开见题型专题。
不能。最坏 O(n)。还要均匀前提;开放定址 α<1。
不能。只对 DAG。有环应先报无法拓扑,不要输出一个假序。