力扣days03 哈希表

哈希结构:数组、set(集合)、map(映射)

  哈希法:当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。

  ① 当我们要使用set(集合)来解决哈希问题的时候:

    1)优先使用unordered_set,因为它的查询和增删效率是最优的(底层哈希表,无序,不可重复);

    2)如果需要集合是有序的,那么就用set(底层红黑树,有序,不可重复);

    3)如果要求不仅有序还要有重复数据的话,那么就用multiset(底层红黑树,有序,可重复)。

  ② 当我们要使用map(映射)来解决哈希问题的时候:

    1)map 是一个key value 的数据结构,对key是有限制,对value没有限制的,key的存储方式使用红黑树实现的。

    2)快速判断一个元素是否出现集合里的时候,就要考虑哈希法。

    3)牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。

力扣242. 有效的字母异位词

  数组其实就是一个简单哈希表;

力扣349. 两个数组的交集

力扣202. 快乐数

  遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。

力扣1. 两数之和

  数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。

  set是一个集合,里面放的元素只能是一个key,无法反映下标位置。

力扣454. 四数相加II

  结合上题处理方式是两个数,可以把四数拆解成2组数相加;

力扣383. 赎金信

力扣15. 三数之和

  哈希法需要去重,做剪枝操作,细节比较多(a,b,c都需要去重);

  建议双指针法:本题不需要求下标,因此可以先排序,再使用三指针,对三个值的和进行判断,大于则right--,小于则left++;

    对a:nums[i] == nums[i+1]判断的是数组内是否有重复,若要判断数组重复应该判断nums[i-1] == nums[i];

力扣18. 四数之和

posted @ 2023-02-23 11:07  LinxhzzZ  阅读(17)  评论(0)    收藏  举报