四数相加II
https://leetcode.cn/problems/4sum-ii/description/
有四个数组,将前两个数组中的值相加a+b。将值存放在map中的key,出现次数为相应key的value,然后遍历后两个数组两两相加的值,如果0-nums3[i]-nums4[j]在map中,则count+= 出现次数
本题解题步骤:
- 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
- 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
- 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
- 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
- 最后返回统计值 count 就可以了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| var fourSumCount = function(nums1, nums2, nums3, nums4) { let map = new Map() for(let i=0;i<nums1.length;i++){ for(let j=0;j<nums2.length;j++){ if (map.has(nums1[i]+nums2[j])){ map.set(nums1[i]+nums2[j], map.get(nums1[i]+nums2[j])+1) } else{ map.set(nums1[i]+nums2[j],1) } } } let count = 0 for(let i=0 ;i<nums3.length;i++){ for(let j=0;j<nums4.length;j++){ if (map.has(-nums3[i]-nums4[j])){ count += map.get(-nums3[i]-nums4[j]) } } } return count };
|