1.题目

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

0 <= i, j, k, l < n

nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0

 

2.代码

class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
/*1.首先定义 一个HashMap,key放a和b两数之和,value 放a和b两数之和出现的次数。
2.遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
3.定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
4.在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
5.最后返回统计值 count 就可以了*/


Map<Integer,Integer> m = new HashMap<>();
for(int i=0; i<nums1.length; i++){

for(int j=0; j<nums2.length; j++){
int sum1 = nums1[i]+nums2[j];

if(m.containsKey(sum1)){
m.put(sum1,m.get(sum1)+1);
}
else{
m.put(sum1,1);
}
}
}
int count =0;
for(int i=0; i<nums3.length; i++){

for(int j=0; j<nums4.length; j++){
int sum2 = nums3[i]+nums4[j];

if(m.containsKey(0-sum2)){
count+=m.get(0-sum2);
}
}
}

return count;
}
}