哈希表
用于快速判断一个元素是否出现在集合中。
哈希函数
哈希碰撞:拉链法,线性探测法
常见的哈希结构:
- 数组
- set(key)
- map(key,value)
底层实现:
set/map :红黑树,key有序,数值不可重复,不可修改,查询效率O(logn),增删(Ologn)
multiset/multimap:红黑树,key有序,数值可重复,O(nlogn),O(nlogn)
unordered_set/unordered_map:哈希表,key无序,数值不可重复,O(1),O(1)
经典题目
- 数组作为哈希表
受数组大小的限制,数组是简单的哈希表,常用于字符串(只有26个字母)中,将字符映射为数字,然后存储于数组中
常见的题目:- Leetcode 242 有效的字母异位同
- Leetcode 1002 查找常用字符
- Leetcode 383 赎金信
- set作为哈希表
当数据是没有限制的数值时,就不适合用数组了,这样会浪费大量的空间
这时可以考虑使用unordered_set
常见的题目:- Leetcode 202 .快乐数
- Leetcode 349.两个数组的交集
- Leetcode 128.最长连续序列
- map作为哈希表
set是一个集合,里面只能放一个元素Key,但是在某些情况下不仅需要放key,还需要放其对应的value,因此这时候可以考虑用map
常见的题目:- Leetcode 1 两数之和
三数之和,四数之和用双指针的解法!!!
- Leetcode 1 两数之和