思路:把四个数组拆成两对,两个分别相加,记录第一对的相加结果进map里,再把第二对数组 0-nums2-nums4 去map里面找出现了几次,这题不用对重复的四元组去重,所以出现多次都有效。
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {HashMap<Integer,Integer> map = new HashMap();int count = 0;//先将前2个数组加起来的值存放map,并且记录出现了多少次,而且这里不用去重四元组的;for(int i=0;i<nums1.length;i++) {for(int j=0; j<nums2.length;j++){int ab = nums1[i]+nums2[j];if(map.containsKey(ab)){map.put(ab, map.get(ab)+1 );}else{map.put(ab, 1);}}}//将另外两个数组的值用0减去,再去map里找有没有出现过,出现过几次,新增的结果是出现的次数for(int k=0;k<nums3.length;k++) {for(int l=0; l<nums4.length;l++){int target = 0-(nums3[k]+nums4[l]);if(map.containsKey(target)){count += map.get(target);}}}return count;}
}