哈希表高频题(两数之和/异位词/连续序列)

共 19 题
#

1. 两数之和(LeetCode 1)中用哈希表存“补数→下标”能把 O(n²) 降到 O(n),先查后存如何避免误用同一元素?

A 先存后查更安全
B 哈希表存补数→下标把查找从 O(n) 变 O(1),先查后存避免误用同一元素 ✓ 正确答案
C 复杂度无法降到 O(n)
D 哈希表存下标→补数
#

2. 字母异位词分组(LeetCode 49)中排序后作 key 与字符计数数组作 key 的取舍,时间复杂度与内存各是多少?

A 排序作 key O(nL log L),计数作 key O(nL),计数法免排序更优 ✓ 正确答案
B 排序作 key 复杂度更低
C 计数作 key 需 O(nL log L)
D 两种 key 复杂度相同
#

3. 最长连续序列(LeetCode 128)中为什么先放入哈希集合去重、再只从“序列起点”向两端扩展能保证 O(n)?

A 只从 x-1 不在集合中的起点扩展,每个序列只遍历一次,总 O(n) ✓ 正确答案
B 对每个元素都向两端扩展
C 复杂度 O(n²)
D 无需去重
#

4. 前 K 个高频元素(LeetCode 347)中统计频率后如何用大小为 K 的小顶堆或桶排序求解?

A 桶排序复杂度 O(n log K)
B 小顶堆复杂度 O(n)
C 哈希统计频率后,小顶堆(O(n log K))或桶排序(O(n))求解 ✓ 正确答案
D 无需统计频率
#

5. 设计 O(1) 随机集合(380),哈希表存下标与动态数组配合删除时的末尾交换删除技巧

A getRandom 不能 O(1)
B 删除需 O(n) 移动
C 删除时把待删元素与末尾交换再删末尾,并更新被交换元素下标,实现 O(1) ✓ 正确答案
D 哈希表存元素→值即可
#

6. 有效的字母异位词(LeetCode 242)中字符计数数组 O(n) 判定,扩展到 Unicode 字符集时如何改用哈希表计数?

A Unicode 也能用固定 int[26]
B 字母用固定数组 O(1) 空间,Unicode 改用哈希表计数 O(字符种类) ✓ 正确答案
C 只需比较长度
D 哈希表空间 O(1)
#

7. 四数相加 II(LeetCode 454)中如何把四个数组拆成“两两求和+哈希计数”从而 O(n²)?

A 复杂度 O(n³)
B 需四重循环 O(n⁴)
C 哈希表只存一个数组
D 拆成两两求和,哈希存 a+b 计数,查 -(c+d),复杂度 O(n²) ✓ 正确答案
#

8. 同构字符串(LeetCode 205)中需要双向映射,只用单向映射会漏判什么?

A 单向映射即可
B 同构是一一对应,需双向映射检测"两个字符映射到同一字符"的多对一 ✓ 正确答案
C 只需 s→t 映射
D 同构不要求一一对应
#

9. 快乐数(LeetCode 202)中如何用哈希集合检测循环,与 Floyd 判圈的取舍?

A 哈希集合记录出现过的数检测循环,Floyd 判圈用快慢指针省空间 ✓ 正确答案
B 哈希集合空间 O(1)
C Floyd 需要 O(n) 空间
D 快乐数循环无法检测
#

10. 存在重复元素 II(LeetCode 219)中哈希表记录最近一次下标与滑动窗口集合两种解法?

A 哈希表记录最近下标 O(n)/O(n),滑动窗口集合 O(n)/O(k) ✓ 正确答案
B 滑动窗口空间 O(n)
C 哈希表空间 O(k)
D 两种解法空间相同
#

11. 猜数字游戏(LeetCode 299)中如何一遍扫描统计 bulls,并用计数数组计算 cows?

A bulls 也计入 cows
B cows 直接等于多余的频次
C 一遍扫描,bulls 相同位置直接算,cows 用两计数数组取 min 的公共频次 ✓ 正确答案
D 无需计数数组
#

12. 找出所有消失的数字(LeetCode 448)中为什么能用“值作下标取负”的原地标记法,与哈希集合的对比?

A 用值作下标取负标记出现,二次扫描正数即未出现,空间 O(1) ✓ 正确答案
B 取负后会破坏值
C 需哈希集合 O(n) 空间
D 无法原地标记
#

13. 寻找重复数(LeetCode 287)中如何用“值作下标”建图 + Floyd 判圈,与哈希/排序解法的取舍?

A 排序法 O(n) 时间
B 需额外 O(n) 空间
C 值作下标建图,重复数是环入口,Floyd 判圈 O(n) 时间 O(1) 空间不修改数组 ✓ 正确答案
D 哈希法 O(1) 空间
#

14. 赎金信(LeetCode 383)中字符计数判定 magazine 能否构成 ransomNote 的边界条件?

A 只需比较长度
B magazine 字符频次必须 ≥ ransomNote 频次,扣减时不足则 false ✓ 正确答案
C 空 ransomNote 为 false
D 字符可重复使用多次
#

15. 单词规律(LeetCode 290)中如何用“模式字符↔单词”双向映射保证一一对应?

A 需 pattern→word 与 word→pattern 双向映射,保证一一对应 ✓ 正确答案
B 单向映射即可
C 只需判断长度
D 不同字符可对应同一单词
#

16. 重复 DNA 序列(187)中如何用滚动哈希加集合去重找出长度 10 的重复子串,与直接子串比较的复杂度对比

A 滚动哈希 O(1) 窗口滑动,直接 substring 每窗口 O(10),滚动哈希更优 ✓ 正确答案
B 直接 substring 也 O(1)
C 滚动哈希产生无碰撞
D 复杂度为 O(n²)
#

17. 砖墙(LeetCode 554)中统计“各边缘位置出现次数”能求最少穿墙数,边缘如何用前缀和枚举?

A 前缀和枚举每行边缘位置,统计重合最多者,穿墙数 = 总行数 - 最大重合数 ✓ 正确答案
B 穿墙数与边缘重合无关
C 需包含最右边缘
D 无需前缀和
#

18. 自定义字符串排序(LeetCode 791)中如何用计数排序按指定顺序重排字符,与 Comparator 排序的差异?

A 计数排序需 O(n log n)
B Comparator 排序 O(n)
C 计数排序按 order 顺序输出+附加剩余,O(n);Comparator 排序 O(n log n) ✓ 正确答案
D 两种方法复杂度相同
#

19. 存在重复元素 III(220)中按值宽度分桶如何把窗口内查找降到 O(1),桶大小与溢出处理

A 无需处理溢出
B 桶大小 t
C 只查同一桶
D 桶大小 t+1,桶内差≤t 必命中,相邻桶需检查,负数用 floorDiv、long 防溢出 ✓ 正确答案