算法-哈希表:四数相加
给出四个长度相同的数组,找出有几种元组可以使A[i]+B[j]+C[k]+D[l]=0。输出元组的个数。
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
//定义一个map,遍历A和B,key为数组A和数组B的和,value为这个和出现的次数
//定义count,遍历C和D时,如果0-(c+d)在map的key中出现,就记录对应的次数
int forSum(vector<int> nums1,vector<int> nums2,vector<int> nums3,vector<int> nums4){
unordered_map<int,int> nums_map;
int count = 0;
for(int i : nums1){
for(int j : nums2){
nums_map[i+j]++;
}
}
for(int i : nums3){
for(int j : nums4){
if(nums_map.find(0-(i+j)) != nums_map.end()){
count += nums_map[0-(i+j)];
}
}
}
return count;
}
int main() {
vector<int> nums1 = {3,1,4};
vector<int> nums2 = {-2,4,3};
vector<int> nums3 = {-1,3,2};
vector<int> nums4 = {3,-2,0};
cout<<forSum(nums1,nums2,nums3,nums4)<<endl;
return 0;
}