四数相加II

四数相加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循环。
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) //注意这里是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])){
// 这里不是+1,而是要加这个数出现的次数。
count += map.get(-nums3[i]-nums4[j])
}
}
}
return count
};