系列文章目录
hash表的实现
哈希表(散列表)的实现数据结构有三种:数组、集合和映射
数组:利用数组的索引下标;
集合(set):set和multiset的底层实现是红黑树,所以key值有序,unordered_set的底层实现是hash表,查询和增删效率为O(1);
映射(map):map和multimap的底层实现是红黑树,所以key值有序,unorfered_map的底层是hash表,查询和增删的效率都为O(1);
在选用数据结构时要考虑:是否要求集合有序、是否要求有重复数据等,
hash解决的问题
1、判断某个元素是否出现在集合中
经典题型
数组作为hash表:
题目特点:个数有限(因为数组大小不是无限开辟的)
有效的字母异位词
赎金信问题
缺点:
当题目没有限制元素或者数值的大小时,无法使用数组做hash表;
当hash值少、分散并且跨度大时,也不建议使用数组,造成数组空间的浪费;
unordered_set作为hash表:
题目特点:去重、无序
两个数组的交集
快乐树
缺点:set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的
set是一个集合,只能存放一个key值;
unordered_map作为hash表:
特点:不仅要存放元素,还要存放索引,也就是key-value结构
不需要key有序、
两数之和
四数相加II
三数之和不能够用hash表,
四数之和和三数之和一个思路,都是使用双指针法
参考文献: