definsert(self, key, value): index = self._hash(key) for item inself.table[index]: if item[0] == key: item[1] = value return self.table[index].append([key, value])
defget(self, key): index = self._hash(key) for item inself.table[index]: if item[0] == key: return item[1] raise KeyError(key)
defremove(self, key): index = self._hash(key) for i, item inenumerate(self.table[index]): if item[0] == key: delself.table[index][i] return raise KeyError(key)
3. 哈希表的应用场景
快速查找和检索
去重
缓存实现
计数器
数据库索引
密码存储(配合加盐和加密算法)
4. 哈希表解题技巧
4.1 两数之和
使用哈希表可以将时间复杂度从 O(n^2) 降到 O(n)。
1 2 3 4 5 6 7 8
deftwo_sum(nums, target): hash_table = {} for i, num inenumerate(nums): complement = target - num if complement in hash_table: return [hash_table[complement], i] hash_table[num] = i return []
4.2 字母异位词分组
使用排序后的字符串作为键,将异位词分组。
1 2 3 4 5 6 7 8
from collections import defaultdict
defgroup_anagrams(strs): groups = defaultdict(list) for s in strs: key = ''.join(sorted(s)) groups[key].append(s) returnlist(groups.values())