题目链接:https://leetcode-cn.com/problems/4sum-ii/
思路:
将4组数字分成两组分别进行计算。首先用一个map存储A[i]+B[j]的结果,其中A[i]+B[j]作为键。A[i]+B[j]的值出现的次数作为值。这样是为了统计同样值出现的次数。然后另0-(C[i]+D[j]),如果在map中,map对应的值即为这一组4个数求和为0出现的次数。然后累加上所有满足条件的组数即可。
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int,int> map;
for(int i = 0;i<A.size();i++)
{
for(int j = 0;j<B.size();j++)
{
map[A[i]+B[j]]++;
}
}
int result = 0;
for(int i = 0;i<C.size();i++)
{
for(int j = 0;j<D.size();j++)
{
if(map.find(0-(C[i]+D[j])) != map.end())
result += map.find(0-(C[i]+D[j]))->second;
}
}
return result;
}
};