# 1. 三数之和中排序+双指针的去重细节为何是高频扣分点? A 外层 i 去重必须用 nums[i]==nums[i-1] 跳过,内层在找到解后跳过相邻重复值 ✓ 正确答案 B 外层 i 去重应在找到解之后进行 C 只需内层去重即可 D 排序后无法去重
# 2. 最长回文子串中中心扩展、动态规划与 Manacher 的复杂度与实现成本对比? A Manacher 的时间复杂度为 O(n²) B DP 的空间复杂度为 O(1) C 中心扩展 O(n²) 时间、O(1) 空间,实现最简单 ✓ 正确答案 D 三种方法复杂度完全相同
# 3. 字符串转整数(atoi)的完整边界清单中空白、符号、溢出、非法字符? A 遇到非法字符应抛异常 B 前导空白无需处理 C 符号可以出现在任意位置 D 溢出判断必须在累加前用 (MAX-digit)/10 预判,防止乘法溢出 ✓ 正确答案
# 4. 最长公共子序列(LCS)与最长公共子串中 DP 转移差异与空间优化(滚动数组)? A 两者转移方程完全相同 B LCS 不匹配时取 max 延续,子串不匹配时清零 ✓ 正确答案 C 最长公共子串不匹配时也取 max D 滚动数组无法优化这两种 DP
# 5. 正则表达式匹配(LeetCode 10)中星号匹配前字符的 DP 状态如何定义,为什么需要特殊处理星号匹配零次? A 星号只能匹配前字符一次或多次 B 星号匹配前字符必须至少一次 C dp[i][j-2] 表示星号匹配零次,这是星号语义"可省略"的必要分支 ✓ 正确答案 D 无需处理 dp[0][j] 的星号边界
# 6. 矩阵遍历中螺旋矩阵、矩阵旋转、岛屿数量(DFS/BFS)的实现要点? A 矩阵旋转不需要转置 B 矩阵旋转必须用额外 O(n²) 空间 C 岛屿数量无法原地标记 D 螺旋矩阵用四个边界收缩,注意单行/单列避免重复访问 ✓ 正确答案
# 7. 字符串 DP 的高频模型中编辑距离、最长公共子序列、最长回文子序列的转移? A LCS 不相等时取两者的和 B 编辑距离不相等时取三种操作代价的最小值加 1 ✓ 正确答案 C 最长回文子序列相等时取 dp[i+1][j-1]+1 D 编辑距离相等时也要加 1
# 8. 矩阵类问题的通用解法中 DFS 洪泛、BFS 层序与原地修改(空间 O(1))的技巧? A DFS 在网格上永远不会栈溢出 B 原地修改必须使用额外的 visited 数组 C BFS 无法处理多源 D DFS 洪泛用于连通分量,BFS 层序用于求最短步数 ✓ 正确答案
# 9. 整数反转(LeetCode 7)中逐位取余拼接时如何用“溢出前判断”避免结果溢出,负数如何处理? A 负数需要特殊处理后才能反转 B 溢出必须在 res*10+d 之前用 MAX/10 与 MAX%10 预判 ✓ 正确答案 C Java 的取余对负数不保留符号 D 溢出时继续拼接
# 10. 螺旋矩阵与旋转图像中边界收缩法与原地转置+翻转的实现要点? A 顺时针旋转 = 转置 + 每行反转 ✓ 正确答案 B 转置需要交换所有 i,j 对包括 i==j C 螺旋矩阵用固定方向遍历即可,无需边界收缩 D 旋转需要 O(n²) 额外空间
# 11. 大数相加/相乘的手写实现中进位处理与前导零清理? A 大数相加只需逐位相加,无需进位 B 前导零清理应把所有 0 都去掉 C 相乘用位置数组累加后无需处理进位 D 逐位相加时维护进位,最高位进位需额外处理 ✓ 正确答案
# 12. 字符串匹配中 KMP 的 next 数组构建,与 BM 算法的坏字符/好后缀启发式? A BM 从前往后匹配 B next 数组是存储每个位置的最短前缀 C KMP 匹配时主串指针永不回退 ✓ 正确答案 D BM 的坏字符与好后缀规则取最小值
# 13. KMP 与 Z 函数中 next 数组/最长公共前后缀的两种等价构造? A Z 数组 z[i] 表示从 i 开头与整个串前缀的最长公共前缀长度 ✓ 正确答案 B next 数组与 Z 函数完全无关 C Z 函数构建复杂度为 O(n²) D next 数组关注起始位置
# 14. 有序矩阵搜索(LeetCode 240)中为什么从右上角开始搜索能 O(m+n),从左下角开始的对称性? A 复杂度为 O(m log n) B 从左上角开始也能每次排除一行 C 从右上角开始,每次比较排除一行或一列,故 O(m+n) ✓ 正确答案 D 右上角元素是行最小列最小
# 15. 字母异位词与滑动窗口(LeetCode 438)中字符计数如何 O(n) 判断窗口内是否为异位词,计数如何更新? A 每次滑动都需重新比较两个计数数组 B 窗口长度不固定 C 用 match 变量维护平衡字符数,可在 O(1) 判断窗口是否异位词 ✓ 正确答案 D 复杂度为 O(n×26)
# 16. 罗马数字转整数(LeetCode 13)中为什么只需比较当前字符与下一字符的大小即可判断左减右加? A 左减右加可发生在任意距离的字符间 B 需要遍历两次才能判断左减右加 C 只需比较当前字符与下一字符的数值,当前小则减、否则加 ✓ 正确答案 D 最后一位字符无需处理
# 17. 最长公共前缀(LeetCode 14)中纵向逐字符扫描与排序后比较首尾字符串的取舍? A 排序后应比较中间两个字符串 B 纵向扫描逐列比较所有字符串,复杂度 O(n×L) ✓ 正确答案 C 纵向扫描空间复杂度为 O(n) D 排序法比纵向扫描总是更快
# 18. 字符串解码(LeetCode 394)中栈如何同时保存重复次数与已解码前缀,嵌套括号的展开顺序? A 遇到数字立即处理 B 嵌套括号从外向内展开 C 用数字栈与字符串栈保存重复次数与已解码前缀 ✓ 正确答案 D 只需一个栈即可
# 19. 杨辉三角(LeetCode 118/119)中递推公式 dp[i][j]=dp[i-1][j-1]+dp[i-1][j] 与只用 O(k) 空间的滚动数组写法? A 边界 dp[i][0] 不为 1 B 滚动数组应从前向后更新 C 求第 k 行必须 O(k²) 空间 D 递推公式为 dp[i][j]=dp[i-1][j-1]+dp[i-1][j] ✓ 正确答案
# 20. 矩阵置零(LeetCode 73)中如何用第一行与第一列作标记实现 O(1) 额外空间,标记冲突如何避免? A 标记阶段与置零阶段可同时进行 B 直接用第一行/列作标记即可,无需额外变量 C 需要 O(n) 额外空间 D 用第一行/第一列作标记,但第一行/列本身是否置零需用两个布尔变量单独记录 ✓ 正确答案
# 21. 矩阵的原地旋转/翻转中如何用转置+行反转实现 90° 旋转? A 旋转需要 O(n²) 额外空间 B 逆时针旋转 = 转置 + 每行反转 C 转置需要交换所有元素包括 i==j D 顺时针旋转 = 转置 + 每行反转 ✓ 正确答案
# 22. 生命游戏(LeetCode 289)中原地更新时如何用“当前/下一状态”两位编码避免覆盖影响? A 位编码无法避免覆盖问题 B 统计时需读取高位的下一状态 C 需要复制整个矩阵 D 用二进制两位编码,低位存当前状态、高位存下一状态,最后整体右移提交 ✓ 正确答案