一、哈希表(字典)基础操作
哈希表(dict)是 Python 中以键 - 值(key-value)对形式存储数据的容器,具有存储不重复的键、有序(Python 3.7+) 、可变等特性。
增
hash_table = {"name": "张三"}
hash_table["gender"] = "男" # 直接赋值新增键值对
删
del hash_table["name"] # 删除指定key
hash_table.pop("name") # 删除并返回对应value
改
hash_table["name"] = "李四" # key存在时,赋值就是更新
查
print(hash_table["name"]) # 直接访问key,不存在会报错
hash_table.get("name") # key不存在,返回默认None
hash_table.get("age", 180) # key不存在,返回默认值180
二、经典算法题:两数之和(LeetCode 1)
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
暴力解法(时间 O (n²),空间 O (1))
双重循环枚举所有可能的数对,判断和是否等于 target。
哈希表解法(时间 O (n),空间 O (n))
核心思路:遍历数组时,用哈希表存储已访问元素的值 - 下标映射,对当前元素 num,直接查找 target - num 是否在哈希表中,若存在则返回结果。
class Solution:
def twoSum(self, nums: list[int], target: int) -> list[int]:
hash_table = {} # 初始化哈希表
# 遍历数组,同时获取下标和元素值
for i, num in enumerate(nums):
complement = target - num # 计算待找的补数
if complement in hash_table:
# 补数在哈希表中,直接返回结果
return [hash_table[complement], i]
# 补数不在表中,将当前元素和下标存入哈希表
hash_table[num] = i
return []
关键知识点
enumerate(nums):同时返回元素的下标和元素值。- 哈希表查找操作时间复杂度为 O (1),因此整体时间复杂度优化为 O (n)。
- 注意:在哈希表中存储已遍历元素,避免使用同一元素两次。
| 类型 | 特性 | 有序性 | 可变性 |
|---|---|---|---|
| 字典(dict) | 键 - 值对存储 | Python 3.7+ 有序 | 可变 |
| 集合(set) | 存储不重复元素 | 无序 | 可变 |
| 列表(list) | 有序可变序列 | 有序 | 可变 |
| 元组(tuple) | 有序不可变序列 | 有序 | 不可变 |