454. 四数相加 II

leetcode-454. 四数相加 II

  • 首先定义 一个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
25
26
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int> umap;
int count = 0;
for(int a : nums1)
{
for(int b : nums2)
{
umap[a + b]++;
}
}

for(int c : nums3)
{
for(int d : nums4)
{
if(umap.find(- c - d) != umap.end() )
{
count += umap[- c - d];
}
}
}
return count;
}
};