题目:
给你四个整数数组 nums1
、nums2
、nums3
和 nums4
,数组长度都是 n
,请你计算有多少个元组 (i, j, k, l)
能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
思路:定义一个map,遍历nums1
、nums2,
key存nums1[i]和nums2[j]的元素之和,value存两数之和出现的次数。定义int变量result,用来统计nums1[i] + nums2[j] + nums3[k] + nums4[l]
= 0 出现的次数。遍历nums3、nums4,
如果 0-(nums3[k]+nums4[l]) 在map中出现过的话,就用result把map中key对应的value也就是出现次数统计出来。
代码:
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer,Integer> map=new HashMap<>();
int result=0;
for(int i:nums1){
for(int j:nums2){
int sum=i+j;
map.put(sum,map.getOrDefault(sum,0)+1);
}
}
for(int k:nums3){
for(int l:nums4){
result+=map.getOrDefault(0-k-l,0);
}
}
return result;
}