哈希表

一.看到题目有这些词,直接上哈希:

  • 要找配对:用 need = 目标 - 当前数。
  • 要计数、去重:用 key 存元素,value 记数。
  • 数组管顺序,哈希管查找,两个搭配做题无敌。
  1. 找两个数、互补、求和
  2. 判断是否重复
  3. 统计出现次数
  4. 找交集、找相同元素
  5. 不想写双层循环、怕超时

Python 刷题,哈希 = 字典 {}。

二.哈希 三大必考模板(小白直接背、直接套、零理解压力)

我只写最简版本,注释全是白话,超级好理解(⊙o⊙)对应三种题型:

  1. 配对查找(两数之和类)
  2. 计数统计(字符/数字出现次数)
  3. 去重判重(有没有重复、是否出现过)

✅ 两数之和固定模板(你直接背)

模板一:配对查找模板(两数之和 必考)

适用场景

找两个数、互补求和、找另一半

核心逻辑

key=数组数字,value=数字下标

# 1. 创建哈希表
hash_map = {}

# 2. 遍历数组,带下标
for idx, num in enumerate(nums):
    # 算出我需要的另一半数字
    need = target - num
    
    # 3. 哈希查找:另一半之前存过吗?
    if need in hash_map:
        # 找到了,直接返回答案下标
        return [hash_map[need], idx]
    
    # 4. 没找到,把当前数字存进哈希,留给后面用
    hash_map[num] = idx

✅ 记忆:
need = 目标 - 当前数
key存数字,value存下标


✅ 频次统计固定模板(你直接背)

模板二:计数统计模板(高频:异位词、赎金信)

适用场景

统计数字/字母 出现多少次

核心逻辑

key=元素,value=出现次数

# 1. 空哈希表
count_map = {}

# 2. 遍历每一个元素
for item in nums:
    if item in count_map:
        # 已经存在,次数+1
        count_map[item] += 1
    else:
        # 第一次出现,初始次数=1
        count_map[item] = 1

简化简写(Python 懒人版,一样好用):

count_map = {}
for item in nums:
    count_map[item] = count_map.get(item, 0) + 1

✅ 记忆:
key存要统计的东西,value存次数


✅ 去重 / 判重固定模板(你直接背)

模板三:去重 / 判重模板(重复元素、数组交集)

适用场景

判断有没有重复、筛选不重复元素

核心逻辑

key=元素,value随便存(标记存在过)

# 1. 空哈希
exist_map = {}

for item in nums:
    # 2. 判断:之前有没有出现过
    if item in exist_map:
        # 重复了
        print("存在重复")
    else:
        # 第一次出现,标记存起来
        exist_map[item] = True

✅ 记忆:
key当黑名单,见过就存,下次再遇见就是重复


终极大白话总结(其实是博主自己有点记不住,写出来鼓励自己的)

  1. 找两个数配对 → 模板一:key=数字,value=下标
  2. 数出现多少次 → 模板二:key=元素,value=次数
  3. 查有没有重复 → 模板三:key=元素,value=标记

以后所有哈希题,按这 4 步走,不用自己硬想逻辑

第一步:读题,只看一句话

看题目在问什么,三选一:

  1. 是不是要「找两个数凑总和」?

    → 套模板 1:配对查找(两数之和)

  2. 是不是要「统计出现几次、对比字母 / 数字数量」?

    → 套模板 2:计数统计

  3. 是不是要「查重复、去重、有没有出现过」?

    → 套模板 3:判重去重

第二步:锁定模板,直接复制整段代码

不要自己写,先完整复制

第三步:只改 2~3 个单词

比如:

nums 改成题目数组名

target 改成题目目标

别的全部不动

第四步:运行、看报错、微调

哪怕半抄半改,先过题,

过一道 → 懂一点 → 慢慢不用抄

posted @ 2026-04-25 08:53  Petula  阅读(41)  评论(0)    收藏  举报