给你四个整数数组 nums1
、nums2
、nums3
和 nums4
,数组长度都是 n
,请你计算有多少个元组 (i, j, k, l)
能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
示例 1:
1 2 3 4 5 6
| 输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2] 输出:2 解释: 两个元组如下: 1. -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + + + 2 = 0 2. -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + + + 0 = 0
|
示例 2:
1 2
| 输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0] 输出:1
|
提示:
n == nums1.length
n == nums2.length
n == nums3.length
n == nums4.length
1 <= n <= 200
-228 <= nums1[i], nums2[i], nums3[i], nums4[i] <= 228
解题思路
先用Map存储nums1和nums2之和sum1出现的频率
再遍历nums3和nums4之和sum2
通过map.get(0-sum2)就能获取满足 sum1 + sum2 = 0的频率
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) { Map<Integer, Integer> map = new HashMap<>(); int count = 0;
for(int i = 0; i < nums1.length; i++){ for(int j = 0; j < nums2.length; j++){ int sum = nums1[i] + nums2[j]; map.put(sum, map.getOrDefault(sum, 0) + 1); } }
for(int i = 0; i < nums3.length; i++){ for(int j = 0; j < nums4.length; j++){ int sum = nums3[i] + nums4[j]; if(map.containsKey(0 - sum)){ count += map.get(0 - sum); } } }
return count;
} }
|