4. 哈希表

1. 使用哈希法一般选择三种数据结构:数组、Set、Map;

  优先使用 unordered_set(查询和增删的效率最优),如果需要集合有序则使用 set,如果要求不仅有序还有重复数据则使用 multiset;

  set、multiset 底层符号表使用红黑树来存储数据,但是依然是使用哈希函数来做映射;Map同理;

集合 底层实现 是否
有序
数值是否
可以重复
能否更改
数值
查询效率 增删效率
set 红黑树 有序 O(log n) O(log n)
multiset 红黑树 有序 O(log n) O(log n)
unordered_set 哈希表 无序 O(1) O(1)
map 红黑树 Key有序 Key不可重复 Key不可重复 O(log n) O(log n)
multimap 红黑树 Key有序 Key可重复 Key可重复 O(log n) O(log n)
unordered_map 哈希表 Key无序 Key不可重复 Key不可重复 O(1) O(1)

 

 

 

 

 

 

 

 

2. 一般哈希法用于解决快速判断一个元素是否出现在集合里;

3. 有效的字母异位词(力扣242):和字母有关的,或者是有一个固定小的范围的,可以使用数组;

4. 两个数组的交集(力扣349):使用 set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的;

5. 快乐数(力扣202):略;

6. 两数之和(力扣1):由于查找目标值和的两数,还需要返回所在数组的下标,存在key-value之间的关系,所以考虑使用map;

7. 四数相加(力扣454):可以拆成两部分进行比较,再对比较后的两部分进行叠加;

8. 赎金信(力扣383):遇到字母的,首先可以考虑数组,使用map的空间消耗比数组大,还要维护红黑树或者哈希表,比较费时;

  

 9. 三数之和(力扣15):双指针法,对于边界的判断尤为复杂;

10. 四数之和(力扣18):同上;

 

 

 

 

 

 

 

  


 

posted @ 2022-09-27 10:44  LinxhzzZ  阅读(23)  评论(0)    收藏  举报