# 1. 全排列(含重复元素去重)的回溯模板中 used 数组与同层剪枝的原理? A used 数组标记跨层已选,同层剪枝(i>0 且 nums[i]==nums[i-1] 且 !used[i-1])去重 ✓ 正确答案 B 同层剪枝需要 used[i-1]==1 C 去重无需排序 D used 数组即可完成去重,无需同层剪枝
# 2. 组合总和系列(可重复选/不可重复/固定个数)的剪枝与去重差异? A 去重无需排序 B 可重复选 start=i+1 C 可重复选 start=i,不可重复 start=i+1 并同层去重,固定个数加长度限制 ✓ 正确答案 D 三种情况完全一样
# 3. Dijkstra 算法的堆优化实现中为什么不能处理负权边?与 Bellman-Ford/SPFA 的适用边界? A Dijkstra 可处理负权 B 贪心选定依赖非负权,负权会破坏已定节点,故须用 Bellman-Ford/SPFA ✓ 正确答案 C Dijkstra 无需优先队列 D Bellman-Ford 无法检测负环
# 4. 回溯算法的模板中路径-选择-约束(choose/explore/unchoose)三要素,剪枝如何加速? A 剪枝会增加搜索空间 B 回溯无需撤销选择 C 三要素是路径/选择/约束,剪枝在 explore 前排除无效分支 ✓ 正确答案 D 回溯是 BFS
# 5. 无向图的割点与桥(Tarjan)中 low 与 dfn 数组如何判定割点或桥,根节点为何要特判? A 割点看 low[v]>dfn[u] B 割点看 low[v]>=dfn[u],桥看 low[v]>dfn[u],根节点用孩子数特判 ✓ 正确答案 C 桥看 low[v]>=dfn[u] D 根节点无需特判
# 6. 最小生成树 Kruskal(并查集)与 Prim(堆)的复杂度对比及稠密/稀疏图选型? A Kruskal 排序边+并查集 O(E log E),Prim 堆 O(E log V),稀疏图用 Kruskal、稠密图用 Prim ✓ 正确答案 B 稀疏图用 Prim C 稠密图用 Kruskal D 两者复杂度完全相同
# 7. 全排列/组合/子集的去重中 used 数组与排序后跳过相邻重复值的写法? A 全排列去重无需排序 B 全排列用 used+同层剪枝,组合/子集用 start+跳过相邻重复,都需排序 ✓ 正确答案 C 组合去重用 used 数组 D 子集去重看 i>0
# 8. 单词搜索(矩阵 DFS + 回溯标记)的原地标记与恢复技巧? A 标记后无需恢复 B 用特殊字符原地标记访问中,DFS 返回后恢复,避免额外 visited 空间 ✓ 正确答案 C 需要独立 visited 数组 D 标记在返回后设置
# 9. 图的遍历中 BFS 求最短路径与 DFS 求连通分量的应用? A BFS 求连通分量 B BFS 按层扩展求最短路,DFS 深度优先求连通分量 ✓ 正确答案 C DFS 求最短路 D 两者都无法求连通分量
# 10. 电话号码的字母组合(LeetCode 17)中回溯模板如何按 digits 逐位展开,与组合问题“选择列表动态生成”的差异? A 与组合问题选择列表完全相同 B 选择列表是全局固定候选集 C 每层可以不选字母 D 按 digits 逐位推进,每层选择列表由当前数字映射决定 ✓ 正确答案
# 11. N 皇后问题中按行回溯 + 列/两对角线占用标记的实现要点? A 按行回溯,用列、主对角线(i-c)、副对角线(i+c)标记冲突 ✓ 正确答案 B 只标记列即可 C 主对角线用 i+c 标记 D 无需撤销
# 12. 括号生成与复原 IP 地址中约束传播式剪枝如何减少无效分支? A IP 段可超 255 B 先生成全部再过滤 C 括号生成可让右括号超过左括号 D 用约束传播式剪枝,每步只扩展合法前缀,剪掉无效分支 ✓ 正确答案
# 13. 欧拉路径与回路(Hierholzer 算法)中用栈逆序输出,奇度顶点数量如何决定路径是否存在? A 无需删边 B 奇度顶点任意数量都存在 C 回路由 2 个奇度顶点构成 D 无向图恰 0 或 2 个奇度顶点才存在,Hierholzer 用删边+栈逆序输出 ✓ 正确答案
# 14. 单词接龙(LeetCode 127)中如何把词转换建模为无权图 BFS,双向 BFS 为何能把搜索空间从 b^d 降到 b^(d/2)? A 单向 BFS 空间更小 B 双向 BFS 每层扩展两端 C 建模为无权图 BFS,双向 BFS 两端各扩 d/2 层,空间从 b^d 降到 b^(d/2) ✓ 正确答案 D 双向 BFS 空间为 b^d
# 15. 二分图判定与最大匹配中染色法 DFS 与匈牙利算法的原理? A 二分图必有奇环 B 染色法判定的偶环 C 匈牙利算法用贪心 D 染色法 DFS 二染色判定(无奇环),匈牙利算法用增广路求最大匹配 ✓ 正确答案
# 16. 最短路径的选型中 Dijkstra 堆优化、SPFA 的适用边界与负权环检测? A 非负权用 Dijkstra,负权用 SPFA/Bellman-Ford,SPFA 用入队次数超 V 检测负环 ✓ 正确答案 B Dijkstra 可处理负权 C SPFA 无法检测负环 D 负权环也有最短路
# 17. CLRS 第 25 章所有节点对最短路径的 Johnson 算法 vs Floyd-Warshall 的工程取舍? A Floyd 无法处理负权 B Johnson 适合稠密图 C Floyd-Warshall O(V³) 适合稠密图,Johnson 重标定+多次 Dijkstra O(VE log V) 适合稀疏图 ✓ 正确答案 D Johnson 无法处理负权
# 18. 子集(LeetCode 78)与组合(LeetCode 77)中“选或不选”与“start 索引”两种回溯写法的等价性? A start 索引写法不支持去重 B 两种写法生成不同集合 C "选或不选"无法生成子集 D "选或不选"是位决策视角,"start 索引"是组合枚举视角,两者生成相同集合 ✓ 正确答案
# 19. 腐烂的橘子(LeetCode 994)中多源 BFS 如何按层记录分钟数,最后如何检查是否还有新鲜橘子? A 分钟数从第 1 分钟开始 B 单源 BFS 即可 C 多源 BFS 所有腐烂同时入队按层扩展,层数即分钟数,最后检查新鲜橘子决定是否 -1 ✓ 正确答案 D 有新鲜橘子未感染也返回 minutes
# 20. 单词搜索 II(LeetCode 212)中 Trie + 回溯如何共享前缀剪枝,与单词搜索(79)单次 DFS 的差异? A Trie 无法共享前缀 B 每个单词单独 DFS 即可 C 用 Trie 存储所有单词,DFS 共享前缀剪枝,一次遍历匹配所有单词 ✓ 正确答案 D 找到单词后无需处理
# 21. DLX 在 dancing links X 算法的双向十字链表工程实现。 A 用双向十字链表实现删除/恢复 O(1),回溯时逆序恢复 ✓ 正确答案 B 单向链表即可 C 删除后无法恢复 D DLX 只解决最长路径
# 22. Dancing Links(DLX)精确覆盖在数独、N 皇后、集合覆盖的工程实现。 A 把约束建模为列、候选解为行,用 DLX 选行使每列恰好覆盖一次 ✓ 正确答案 B 数独无需建模约束列 C DLX 只适用集合覆盖 D 皇后问题无需对角约束