思路
如果我们暴力求解一定是n的四次方,那我们暴力肯定是过不去的,我们能简化四次方吗?
可以,我第一次尝试把四次方简化成二次方,但是我们一共四个数组,怎么简化成二次方,那我们就把四个数组看成两个数组,这样我们就可以使用二次方进行求解了,每两个数组进行一次n方。这道题也是一道哈希题,我们面对哈希题就可以使用数组,set和map,因为我们需要统计有几个原组和前两个数组的和,所以我们使用map来搞。
前两个数组使用n方进行和的相加存入map,如果存在相同值,我们value就++
后两个数组使用n方进行和的相加,如果我们想结果=0,那么前两个数组和后两个数组的和一定是相反数,如果相加=0了,那么我们就将一开始存的value相加到结果中就行了。
因为这个value代表了前两个数组一共有多少种结果。
代码:
class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {int count = 0;Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++) {for (int j = 0; j < nums2.length; j++) {int num = nums1[i] + nums2[j];map.put(num, map.getOrDefault(num, 0) + 1);}}for (int i = 0; i < nums3.length; i++) {for (int j = 0; j < nums4.length; j++) {int num = nums3[i] + nums4[j];if (map.containsKey(-num)) {count += map.get(-num);}}}return count;}
}