子数组计数、双指针与前缀和

共 32 题
#

1. 三数之和(15)如何排序+双指针+去重避免超时

A 排序会破坏双指针正确性
B 双指针无法在有序数组上找两数和
C 排序后固定 i 用双指针在右侧找两数和,并跳过重复值去重,O(n²) ✓ 正确答案
D 用三重循环暴力即可,不需要排序
#

2. 为什么三数之和要先排序而非用哈希(去重与复杂度权衡)

A 哈希法比排序法更快且去重更简单
B 排序会增加复杂度到 O(n² log n)
C 排序使双指针可行且去重只需跳过相同值,比哈希法去重更方便 ✓ 正确答案
D 排序后无法用双指针
#

3. 前缀和与差分的互逆关系及恢复原数组的扫描方式

A 差分数组的前缀和是差分数组本身
B 前缀和与差分完全没有关系
C 前缀和与差分互为逆运算,差分数组做一次前缀和扫描即可恢复原数组 ✓ 正确答案
D 恢复原数组需要排序
#

4. 前缀和配合哈希表统计"和为 K 的子数组个数"(560)

A 用哈希表记录前缀和出现次数,对每个位置累加 map[prefix[i]-K],O(n) ✓ 正确答案
B 需要先排序再统计
C 必须枚举所有子数组 O(n²)
D 前缀和无法用于子数组计数
#

5. 有序数组合并/区间交集如何用双指针线性扫描

A 双指针分别指向两序列,依序比较移动,指针单调前进,O(m+n) ✓ 正确答案
B 指针会反复回退
C 双指针只能用于合并,不能求交集
D 需要二分查找才能合并
#

6. 滑动窗口中位数/第 K 大(结合平衡树或双堆)

A 用双堆(延迟删除)或平衡树维护有序集合,插入删除 O(log k),总 O(n log k) ✓ 正确答案
B 中位数无需维护有序集合
C 双堆无法处理删除
D 单调队列可以 O(n) 求中位数
#

7. 用前缀和 O(1) 求任意子数组和及如何避免越界处理

A 前缀和查询需要 O(n)
B 用 p[0]=0 作哨兵,子数组 [l,r] 和 = p[r+1]-p[l],避免 l=0 越界 ✓ 正确答案
C 前缀和只能求前缀,不能求任意子数组
D 必须特判 l=0 的情况
#

8. 最小覆盖子串(76)如何用 need/found 双计数精确收缩

A 只能扩展不能收缩
B 不需要记录 matched,直接比较即可
C 每次收缩都重新比较两个哈希表
D 用 matched 记录已满足需求的字符种类数,收缩时仅当字符需求跌破才更新 matched ✓ 正确答案
#

9. 统计"无重复字符的最长子串"(3)如何用 last 哈希 O(n)

A last 哈希只能从左往右不能从右往左
B 用 last 记录字符最近位置,遇到重复时左指针直接跳到重复位置之后,O(n) ✓ 正确答案
C 遇到重复必须逐个收缩左指针
D 需要 O(n²) 枚举所有子串
#

10. 为什么统计子数组和为 K 时要用"前缀和出现次数"而非枚举

A 枚举子数组也是 O(n) 可行
B 前缀和无法用于计数
C 哈希统计只适用于和为 0
D 子数组和=前缀和之差,用哈希统计前缀和出现次数降至 O(n),避免 O(n²) 枚举 ✓ 正确答案
#

11. 前缀和取模(同余)在"可被 K 整除子数组"中的运用

A 负数取模无关紧要
B 需要枚举所有子数组验证整除
C 同余只适用于和为 0
D 子数组和可被 K 整除等价于两前缀和同余,用桶统计相同余数出现次数,O(n) ✓ 正确答案
#

12. 前缀和数组下标偏移(+1)技巧对处理空前缀的帮助

A 偏移只影响求和不影响计数
B 偏移 +1 会让查询越界
C p[0]=0 表示空前缀,使 l=0 的子数组无需特判,计数时 map[0]=1 借助空前缀 ✓ 正确答案
D 空前缀无法参与计数
#

13. 平方有序数组(977)双指针从两端取极值归并

A 双指针无法处理负数
B 平方后最大值在两端,双指针从两端取绝对值较大者填入结果末尾,O(n) ✓ 正确答案
C 最大值在数组中间
D 平方后直接排序即可,复杂度 O(n)
#

14. 盛最多水的容器(11)双指针按"短板决定水量"的贪心推进

A 每次移动较高一侧指针
B 必须枚举所有点对 O(n²)
C 每次移动较矮一侧指针,因为移动较高侧 min 不变且宽度减小不可能更优 ✓ 正确答案
D 水量由较高一侧决定
#

15. 有序数组两数之和(167)双指针收缩的正确性与单调性依据

A 和大于目标时右指针左移、小于时左指针右移,单调收缩保证不遗漏解 ✓ 正确答案
B 和大于目标时左移左指针
C 必须先二分查找
D 双指针在有序数组上也能错乱
#

16. 滑动窗口与位掩码结合处理"子数组 OR 值≥目标"类题

A OR 值随窗口扩大单调递减
B 用位计数数组维护窗口内每位为 1 的个数,窗口移动时 O(位数) 更新 OR 值 ✓ 正确答案
C OR 值可以像和一样用加减维护
D 位掩码无法用于 OR 问题
#

17. 一维差分如何实现"区间 [l,r] 全部加 v"的 O(1) 标记

A 差分只能做区间查询不能做更新
B 每次更新都要重新计算整个数组
C 区间 [l,r] 加 v 只需 d[l]+=v 且 d[r+1]-=v,最后一次前缀和还原 ✓ 正确答案
D 需要遍历区间内每个元素加 v
#

18. 为什么最小覆盖子串收缩时要先判断"该字符仍必需"再移动

A 只要窗口合法就随意收缩
B 收缩时不需要判断字符必需性
C 先判断该字符是否仍必需(移除后会否跌破需求),再决定移动与更新 matched ✓ 正确答案
D 移除任何字符都更新 matched
#

19. 含通配符的子串匹配如何用窗口+频率表处理 '?' 与 '*'

A '*' 不能被拆分
B 通配符匹配必须用动态规划,无法用窗口
C '?' 只能匹配固定字符
D 用 '*' 把模式拆成普通段,段内用窗口+频率表匹配('?' 可任意),段间顺序匹配 ✓ 正确答案
#

20. 字符串排列(567)窗口长度固定时的判定优化

A 定长窗口无法判断排列
B 用定长窗口 + 频率表 + 匹配字符数变量,O(1) 更新和判断,整体 O(n) ✓ 正确答案
C 需要每次重新统计整个窗口频率
D 必须对 s2 排序
#

21. 最长连续 1(限翻转 K 个 0)如何用窗口内 zero 计数控制

A 把问题化为"窗口内 0 的个数 ≤ K",右扩左缩维护 zero 计数,O(n) ✓ 正确答案
B 用 zero 计数但无法控制窗口
C 窗口内 0 的个数必须等于 0
D 需要实际翻转并记录
#

22. 统计所有"恰好 K 个"子串的数量而非仅找最大值

A 恰好 K 个无法统计,只能找最大值
B 直接用暴力枚举恰好 K 个
C 用 atMost(K) - atMost(K-1),atMost 用滑动窗口 O(n) 统计 ✓ 正确答案
D atMost(K) + atMost(K-1) 才是恰好 K 个
#

23. 统计满足"子串中每种字符出现次数≥某阈值"的个数

A 枚举子串包含的字符种数 k,对每个 k 用滑动窗口维护计数并判定,O(26×n) ✓ 正确答案
B 无法统计,只能找最长
C 必须用哈希比较
D 不需要枚举字符集
#

24. 至少有 K 个重复字符的最长子串如何用分治+计数结合

A 分治无法求解该问题
B 出现次数 < K 的字符可以出现在答案中
C 必须用滑动窗口
D 用出现次数 < K 的字符切分字符串,递归处理各段,段内无坏字符则整段合法 ✓ 正确答案
#

25. 如何在滑动窗口中维护"不同元素个数/最大频率"两类信息

A maxFreq 增加时无法更新
B distinct 每次都要重新统计
C 两者都能 O(1) 更新
D distinct 在计数跨 0↔1 时 O(1) 更新;maxFreq 减少时常用频率分布表/平衡树维护 ✓ 正确答案
#

26. 对撞指针与快慢指针的语义区分及各自典型场景

A 两者都是对撞
B 对撞指针从两端向中间收敛(两数之和/回文),快慢指针同向差速(链表找环/中点) ✓ 正确答案
C 对撞指针用于链表找环
D 快慢指针用于有序数组求两数之和
#

27. 四数之和如何在外层固定后复用三数之和框架并继续剪枝

A 无法去重
B 复杂度是 O(n²)
C 排序后固定两个数,再用双指针找后两个,复用三数之和框架,O(n³) 并剪枝去重 ✓ 正确答案
D 不需要排序
#

28. 多条件(长度≥L 且不同字符≤K)窗口如何定义合法

A 约束之间不能组合
B 硬约束(如不同字符≤K)控制收缩,软约束(如长度≥L)控制更新答案,组合判定 ✓ 正确答案
C 所有约束都必须用于收缩
D 多条件无法用滑动窗口
#

29. 如何用"异位词"窗口思想解决变体(允许 K 处不同)

A 把"差异数=0"放宽为"差异数≤K",用频率表 O(1) 维护差异数 ✓ 正确答案
B 差异数必须重新计算
C 只需要比较首尾字符
D K 处不同无法用窗口判定
#

30. 差分在"多次区间更新后求点值"场景相比线段树的优势

A 差分总是比线段树好
B 线段树比差分更新更快
C 只需批量更新后求点值时差分 O(1) 更新 + O(n) 还原,比线段树更简单高效 ✓ 正确答案
D 差分无法批量更新
#

31. 按位运算约束(如 XOR 恰好)的窗口如何维护前缀异或

A 异或不可逆,无法用前缀
B 异或前缀无法用于计数
C 需要枚举所有子数组
D 子数组异或 = pre[r]^pre[l-1],用哈希统计 pre[r]^K 出现次数,O(n) ✓ 正确答案
#

32. 窗口内维护"元素种类数"与"每种计数"的两张表如何协同

A cnt 跨 0↔1 边界时才更新 distinct,两表同步一致 ✓ 正确答案
B 计数表不需要 distinct
C 两张表完全独立,无需同步
D distinct 每次重新统计