454. 四数相加 II
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:
0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
示例 1:
输入: nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
输出: 2
示例 2:
输入: nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]
输出: 1
思路:
四数之和转化为两数相加(详见力扣-1-两数之和)
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int n=nums1.size(),ans=0;
unordered_map<int,int> map;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
map[nums1[i]+nums2[j]]++;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(map.count(-nums3[i]-nums4[j])){
ans+=map[-nums4[j]-nums3[i]];
}
}
}
return ans;
}
};