给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。
例如
输入:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, -2]
输出: 3
代码:
//四数相加II
#include<iostream>
#include<unordered_map>
using namespace std;
int main()
{
int a[2] = {1,2};
int b[2] = {-2,-1};
int c[2] = {-1,2};
int d[2] = {0,-2};
int count = 0; //统计出现的次数
unordered_map<int,int> maps;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
int temp = a[i]+b[j];
maps[temp]++; //因为map里面不会出现重复的key,所以后面相同的key会覆盖掉前面的key和value值
}
}
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
int temp = -(c[i]+d[j]);
if(maps.find(temp)!=maps.end())
{
count+= maps[temp];
}
}
}
cout<<count;
return 0;
}