做任务挣钱网站/怎么在网上做广告宣传
文章目录
- 四数之和II
- 1.解法
- 2.总结
- python
- 算法
四数之和II
leetcode链接
1.解法
本题解题步骤:
1.首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
2.遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
3.定义int变量count,用来统计a+b+c+d = 0 出现的次数。
4.在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
5.最后返回统计值 count 就可以了
def fourSumCount(nums1,nums2,nums3,nums4):hashmap = collections.defaultdict(int)for num1 in nums1:for num2 in nums2:hashmap[num1+num2] += 1count = 0 # 用来计数for num3 in nums3:for num4 in nums4:if -num3-num4 in hashmap:count += hashmap[-num3-num4]return count
2.总结
python
- 在对map使用判断 if num in map时,判断的是num是否在map.keys()中,而不是map.values()中
- collections.defaultdict():使用这个就不用对num1+num2是否在map中分情况赋值了 ,就可以统一写成hashmap[num1+num2] += 1
算法
四数相加为什么要分成两两求和,然后再统计数量?
因为如果单纯使用暴力的话,时间复杂度为O(n4)O(n^4)O(n4);如果分成先统计一个出现的次数,然后计算另外三个的和,再进行比较的话,时间复杂度为O(n3)O(n^3)O(n3);如果平分的话,那么时间复杂度就降为O(n2)O(n^2)O(n2),所以一般遇到这类问题,平分的情况下,时间复杂度是最低的。