# 1. "去掉外层括号/括号得分"类题与单调栈的关联 A 用栈记录未匹配的左括号位置,遇到右括号弹出并结算区间,两类题共享栈思想 ✓ 正确答案 B 括号类题与栈完全无关 C 括号类题必须用哈希表 D 最长有效括号不需要栈
# 2. 单调队列处理"窗口最小值"时只需把比较符号反向 A 求最小值时队首应维护最大元素 B 需要改用完全不同的数据结构 C 最小值无法用单调队列维护 D 只需把弹出条件从"弹出比它小的"改为"弹出比它大的",维护递增队列即可 ✓ 正确答案
# 3. 单调队列(deque)如何 O(1) 维护滑动窗口最大值(239) A 每个元素可能进出队列多次,复杂度 O(nk) B 队列中存的是值而非下标,无需考虑出窗 C 需要维护一个单调递增的队列,队首最小 D 维护值递减的队列,队尾弹出更小元素、队首弹出出窗元素,队首即最大值 ✓ 正确答案
# 4. 多重集合/平衡树做窗口最值与单调队列的复杂度对比 A 只求最值时单调队列 O(n);需要中位数等完整有序信息时平衡树 O(n log k) 更合适 ✓ 正确答案 B 单调队列必须维护完整有序集合 C 两者复杂度完全相同 D 平衡树比单调队列更快,应优先使用
# 5. 如何用单调栈 O(n) 构建笛卡尔树(Cartesian Tree),维护右链的单调性,每个新节点沿右链上爬找到父节点,证明总复杂度 O(n) A 每个节点可被多次弹出,总复杂度 O(n²) B 笛卡尔树只能用递归构建,无法用单调栈 C 单调栈维护右链,弹出比新节点大的节点成为其左子树,每个节点只进出一次故 O(n) ✓ 正确答案 D 构建笛卡尔树需要 O(n log n) 排序
# 6. 如何用单调队列优化"最大子数组和(限长窗口)"类 DP A 限长窗口的 DP 无法用单调队列优化 B 需要三重循环枚举所有子数组 C 单调队列无法用于前缀和,必须用平衡树 D 用前缀和之差转化问题,再用单调队列维护窗口内最小前缀和,转移降为 O(1) ✓ 正确答案
# 7. 如何用滑动窗口在 O(n) 内求"最多含 K 个不同字符的子串" A 必须用哈希表再套排序 B 窗口只能固定长度,不能变化 C 需要两层循环枚举所有子串,复杂度 O(n²) D 用频率表 + distinct 变量,右扩左缩,每个字符进出一次,整体 O(n) ✓ 正确答案
# 8. 如何证明基于单调栈的贪心策略不会错过最优解 A 常用交换论证/反证法证明贪心局部最优与全局最优一致,从而不遗漏最优解 ✓ 正确答案 B 单调栈贪心一定正确,无需验证 C 贪心策略只能通过暴力测试验证 D 贪心不需要证明,只要实现正确即可
# 9. 滑动窗口最大值中如何保证队首始终是窗口内最大元素 A 值递减保证队首最大,且出窗时从队首弹出超窗下标,两者共同保证队首是窗口内最大 ✓ 正确答案 B 只需要保证队内值递减,无需处理出窗 C 队首始终是数组的最大值 D 需要重新排序整个窗口
# 10. 笛卡尔树与 RMQ ±1 问题的关系中为何数组的笛卡尔树中序遍历对应原数组,LCA 对应 RMQ,从而把 RMQ 归约为 LCA A 笛卡尔树中序遍历对应原数组,任意区间 [l,r] 的最小值恰为位置 l 与 r 的 LCA 值,从而 RMQ 归约为 LCA ✓ 正确答案 B 笛卡尔树的中序遍历是排序后的数组 C LCA 只存在于二叉搜索树中 D 笛卡尔树与 RMQ 完全无关
# 11. 笛卡尔树在'最大二叉树'(LeetCode 654)中的直接应用中递归找最大值 vs 单调栈 O(n) A 递归找最大值法最坏也是 O(n),不必用单调栈 B 最大二叉树与笛卡尔树无关 C 单调栈只能建小根笛卡尔树 D 最大二叉树就是大根笛卡尔树,可用单调栈 O(n) 构建 ✓ 正确答案
# 12. 面试中如何向面试官从暴力 O(n²) 推导到单调栈 O(n) A 先给暴力 O(n²) 指出重复扫描瓶颈,再引出"淘汰机制+每个元素只进出一次"得到 O(n) ✓ 正确答案 B 单调栈无法从暴力推导而来 C 面试中不需要解释复杂度 D 应直接给出最终 O(n) 代码,不需要展示过程
# 13. 为什么单调队列在固定窗口下每个元素也最多进出一次 A 每个元素只入队一次、出队一次,总操作 O(n) ✓ 正确答案 B 每个元素可能进出多次,复杂度 O(nk) C 元素从队尾弹出后还会重新入队 D 单调队列需要 O(n log n) 维护
# 14. 为什么单调队列存的是候选下标而非值,并在出窗时淘汰 A 下标没有大小关系,无法用于比较 B 存下标是为了省内存 C 存值更方便,没有必要存下标 D 存下标便于判断元素是否已滑出窗口,并在出窗时从队首淘汰 ✓ 正确答案
# 15. 单调栈与哈希结合记录每个值首次/末次出现的综合运用 A 两者只能单独使用,不能结合 B 哈希记录值首次/末次出现等全局信息,单调栈处理位置单调性,两者互补 ✓ 正确答案 C 哈希表可以完全替代单调栈 D 哈希表破坏单调栈的复杂度
# 16. 在动态窗口(右扩左缩)场景下单调队列仍然成立吗 A 变长窗口必须用平衡树 B 动态窗口下单调队列复杂度会退化为 O(n²) C 变长窗口时只要左指针收缩时弹出队首中超出左边界的下标即可,单调队列依然成立 ✓ 正确答案 D 单调队列只适用于固定长度窗口
# 17. 拼接最大数(321)如何把"选 k 个"子问题化为单调栈 A 子问题无法化成单调栈 B 子问题"从数组选 k 个最大子序列"用单调栈贪心,再枚举切分并归并合并取最大 ✓ 正确答案 C 该问题与单调栈无关,直接排序即可 D 只能从两个数组中各取相同数量的数字
# 18. 滑动窗口在"子数组满足某条件"的通用判定框架 A 右指针右扩、不合法时左指针左缩、满足条件时记录答案,状态增量维护 ✓ 正确答案 B 滑动窗口只能处理固定长度 C 左右指针可以任意乱序移动 D 需要每次重新扫描整个窗口计算状态
# 19. 用单调栈求"能看到右侧的人"或"可见建筑"的计数问题 A 必须从左往右扫描并维护递减栈 B 从右往左扫描并用单调栈维护右侧可见的递增序列,弹出被遮挡的元素 ✓ 正确答案 C 无法用单调栈求解,需 O(n²) D 可见性与高度无关,只要更高就可见
# 20. 移除 K 位数字(402)贪心+单调递增栈的构造正确性 A 需要动态规划而非贪心 B 删除任意一位效果相同 C 应删除最低位的数字 D 出现降序对时删除较高的前一位必然使结果变小,反复删除即得最小结果 ✓ 正确答案
# 21. 笛卡尔树与单调栈的'对偶'中单调栈的弹出序列恰好是笛卡尔树右链的逆序 A 笛卡尔树右链是递减的 B 两者完全无关 C 单调栈的栈内元素就是笛卡尔树的当前右链,弹出序列对应右链的逆序 ✓ 正确答案 D 单调栈只能构建二叉搜索树
# 22. "恰好 vs 至少"翻转技巧中用 atMost(k)-atMost(k-1) 求恰好 A 该技巧只能用于固定窗口 B "最多"比"恰好"更难统计 C 恰好 k = atMost(k) - atMost(k-1),把"恰好"转化为两个"最多"的滑动窗口计数 ✓ 正确答案 D 恰好 k = atMost(k) + atMost(k-1)
# 23. Fischer-Heun 结构利用 ±1 RMQ 在 O(n) 预处理 O(1) 查询中块内用笛卡尔树编码,块间用 Sparse Table A 块内用笛卡尔树形态编码成整数实现 O(1),块间用 Sparse Table,整体 O(n) 预处理 O(1) 查询 ✓ 正确答案 B 块内需要 O(1) 但块间必须 O(log n) C 它无法查询任意区间 D 它只能处理非 ±1 的 RMQ
# 24. 用笛卡尔树统一视角看直方图最大矩形与接雨水,笛卡尔树根=区间最小值,左右子树=左右子区间,矩形面积=高度×子树宽度 A 最大矩形与接雨水与笛卡尔树无关 B 笛卡尔树根是区间最小值,子树对应区间,矩形面积=高度×子树宽度,两问题同源 ✓ 正确答案 C 笛卡尔树根是区间最大值 D 子树宽度无法用于计算面积
# 25. Treap 与笛卡尔树的等价性中 Treap 的(key 满足 BST,priority 满足 heap)双性质为何恰好对应笛卡尔树的(中序=key 序,堆=priority) A 笛卡尔树不是 BST B Treap 与笛卡尔树完全不同 C Treap 的 key 满足 BST、priority 满足堆,与笛卡尔树"中序=key 序、堆=priority"完全对应,二者等价 ✓ 正确答案 D Treap 不满足堆性质
# 26. 变长窗口(如"和≥target 的最短子数组")如何用双端推进 A 左指针先右扩、右指针后收缩 B 该问题无法用滑动窗口解 C 需要枚举所有子数组 O(n²) D 右指针右扩到窗口和≥target,再左缩找更短,每个元素进出一次,O(n) ✓ 正确答案
# 27. 哈希表维护窗口字符频率时的增删与计数同步细节 A 每次增删都重新计数不同字符 B 频率表不需要记录 distinct C 只有频率在 0↔1 之间跨越时才更新"不同字符数"计数 ✓ 正确答案 D 左指针移除时 distinct 一定减一
# 28. 定长窗口(如"长度为 k 的子数组最大和")的模板与滑入滑出 A 每次滑动都需要重新扫描整个窗口 B 滑入新元素、滑出旧元素,O(1) 增量更新,无需 while 收缩 ✓ 正确答案 C 定长窗口必须用 while 收缩 D 定长窗口无法求最值
# 29. 容斥/计数型中统计以某元素为最小值的子数组个数 A 只需要左侧边界即可 B 用单调栈求左右第一个更小位置,个数 = (i-L)×(R-i) ✓ 正确答案 C 该元素为最小值的子数组个数是固定的 C(n,2) D 无需单调栈,直接枚举
# 30. 笛卡尔树在'区间最值查询'中的应用中构建笛卡尔树后 RMQ(l,r) = LCA(位置 l, 位置 r) 的值 A 构建笛卡尔树后 RMQ(l,r) = 位置 l 与 r 的 LCA 的值 ✓ 正确答案 B RMQ(l,r) 等于 LCA 的深度 C 笛卡尔树无法用于 RMQ D RMQ(l,r) 等于区间内所有元素之和
# 31. 笛卡尔树的唯一性中给定互异数组,小根笛卡尔树是否唯一?若存在重复值如何处理 A 互异数组的笛卡尔树唯一;重复值需用附加规则打破平局才能唯一 ✓ 正确答案 B 重复值不影响笛卡尔树的结构 C 笛卡尔树永远唯一 D 即使互异,笛卡尔树也不唯一
# 32. 为何变长窗口右指针只进不退,左指针仅按需收缩 A 右指针需要经常回退以重新调整 B 右指针只进不退、左指针仅按需收缩,指针单调移动保证 O(n) ✓ 正确答案 C 左右指针可以任意乱序移动 D 左指针也应该只进不退地推进
# 33. 窗口合法性判定函数如何抽象以便应对多种约束 A 把"窗口是否合法"抽成独立函数,与滑动窗口过程解耦,便于复用多种约束 ✓ 正确答案 B 判定函数只适用于定长窗口 C 判定逻辑必须写死在滑动循环里 D 抽象后无法处理多约束