力扣454四数相加Ⅱ(c++)
思路
四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况。
本题解题步骤:
首先定义 一个unordered_map<int,int>,key准备存放a和b两数之和,value 准备存放a和b两数之和出现的次数。
遍历大A和大B数组,统计两个数组元素之和放到key中,和的出现的次数放到value中。
定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
最后返回统计值 count
代码
class Solution
{
public:
int fourSumCount(vector<int> &nums1, vector<int> &nums2, vector<int> &nums3, vector<int> &nums4)
{
unordered_map<int, int> map; // key:a+b的数值,value:a+b数值出现的次数
// 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中
for (int a : nums1)
{
for (int b : nums2)
{
map[a + b]++;
}
}
int count = 0;
int temp;
// 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就把map中key对应的value也就是出现次数统计出来。
for (int c : nums3)
{
for (int d : nums4)
{
temp = 0 - (c + d);
if (map.find(temp) != map.end()) //哈希表中找到了和temp相等的key
{
count += map[temp];
}
}
}
return count;
}
};
代码运行结果: