← 返回首页

第二章-哈希表

第二章:哈希表 (Hash Tables)

学习内容

哈希表(Hash Table)是一种非常重要的数据结构,它提供了快速的数据存储和检索能力。

哈希表基础

哈希表是一种键值对存储结构,通过哈希函数将键映射到数组的特定位置。

#### 核心原理



#### 常见实现方式
1. 链表法:将冲突的元素存储在链表中
2. 开放寻址法:在哈希表数组中寻找下一个空位置

LinkedHashMap 和 ArrayHashMap

#### LinkedHashMap


#### ArrayHashMap


重点和难点

重点


1. 理解哈希表的工作原理
2. 掌握哈希函数的设计原则
3. 理解冲突处理机制

难点


1. 哈希函数的设计
2. 不同冲突处理方法的优劣比较
3. 负载因子对性能的影响

练习题

基础题目


1. 两数之和 (Two Sum)
- 题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
- 解题思路:使用哈希表存储已遍历的元素及其索引,对每个元素检查 target - 当前元素 是否存在于哈希表中。
- 注意点:确保返回的两个索引不相同。

2. 有效的字母异位词 (Valid Anagram)
- 题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
- 解题思路:使用哈希表统计每个字符出现的次数,比较两个字符串的字符统计结果。
- 注意点:注意处理空字符串和长度不同的情况。

进阶题目


1. LRU缓存 (LRU Cache)
- 题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。
- 解题思路:结合哈希表和双向链表实现,哈希表提供 O(1) 查找,双向链表维护访问顺序。
- 注意点:注意处理容量限制和节点的移动操作。

2. 设计哈希映射 (Design HashMap)
- 题目:不使用任何内建的哈希表库设计一个哈希映射。
- 解题思路:设计哈希函数和冲突处理机制,可以使用链表法处理冲突。
- 注意点:考虑扩容机制和负载因子的控制。

解题思路总结

哈希表的应用场景


1. 快速查找:O(1) 时间复杂度查找
2. 去重:利用哈希表的唯一键特性
3. 计数:统计元素出现次数

设计哈希函数的原则


1. 一致性:相同输入必须产生相同输出
2. 均匀分布:尽量减少冲突
3. 高效性:计算简单快速

学习时间

建议学习时间:1-2天