哈希表本质:写表,然后查表.
用hash表查找的时间复杂度为O(1);
<模式识别:一旦涉及出现次数,需要用到哈希表>
有些题不会很明显看出可以用哈希表,但通过做题可以触类旁通,比如可以将题目的条件一步一步转换,直到变成了你所熟悉的问题).
就比如:给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。子数组 是数组的一段连续部分.就转换成了给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k
还有(454.四数相加):满足
- nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
就可以将负的(nums1[i]+nums2[j])存到哈希表中,然后查找nums3[k]+nums[l]值并累加即可(ans+=hash[nums3[k]+nums[l]];)
如果数据量比较大,就可以采用c++中的unordered_map <>hash
如果只判断有没有,用unodered_set<>hash就可以了,到时候有就用insert()进行插入,判断就可以用if(hash.count())