力扣days03 哈希表
哈希结构:数组、set(集合)、map(映射)
哈希法:当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。
① 当我们要使用set(集合)来解决哈希问题的时候:
1)优先使用unordered_set,因为它的查询和增删效率是最优的(底层哈希表,无序,不可重复);
2)如果需要集合是有序的,那么就用set(底层红黑树,有序,不可重复);
3)如果要求不仅有序还要有重复数据的话,那么就用multiset(底层红黑树,有序,可重复)。
② 当我们要使用map(映射)来解决哈希问题的时候:
1)map 是一个key value 的数据结构,对key是有限制,对value没有限制的,key的存储方式使用红黑树实现的。
2)快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
3)牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
数组其实就是一个简单哈希表;
遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
set是一个集合,里面放的元素只能是一个key,无法反映下标位置。
结合上题处理方式是两个数,可以把四数拆解成2组数相加;
哈希法需要去重,做剪枝操作,细节比较多(a,b,c都需要去重);
建议双指针法:本题不需要求下标,因此可以先排序,再使用三指针,对三个值的和进行判断,大于则right--,小于则left++;
对a:nums[i] == nums[i+1]判断的是数组内是否有重复,若要判断数组重复应该判断nums[i-1] == nums[i];

浙公网安备 33010602011771号