本题乍一看没什么比较好的解决方法,实际上确实只能用两个for循环做= - =。将1、2数组分为一组,3、4数组分为一组,for循环遍历1和2的所有元素相加,用HashMap储存,key为相加和,value为出现次数。同时将3、4所有数遍历相加并取负数,这样若1、2和3、4的和相同的情况下,总和为0,然后与HashMap中比较,若相同则输出value值即为存在的元组。
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
Map<Integer,Integer> map = new HashMap<>();
int res = 0;
int n = nums1.length;
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++) {
int sum = nums1[i] + nums2[j];
if (map.containsKey(sum)) {
map.put(sum, map.get(sum) + 1);
}else {
map.put(sum, 1);
}
}
}
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++) {
int sum2 = - (nums3[i] + nums4[j]);
if (map.containsKey(sum2)) {
//map.put(sum2,map.get(sum2) - 1);
res += map.get(sum2);
}
}
}
return res;
}
}