四数相加 => 两数相加
LeetCode链接:454. 四数相加 II
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
示例 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
- $-2^{28} <= nums1[i], nums2[i], nums3[i], nums4[i] <= 2^{28}$
2.题解
2.1 分组+哈希集合
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 26 27 28 29 30 31 32 33 34 35 36
| class Solution { public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) { int n = nums1.length; Map<Integer, Integer> map = new HashMap<>(); int count = 0;
for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int sum = nums1[i] + nums2[j];
map.put(sum, map.getOrDefault(sum, 0) + 1); } }
for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { int diff = 0 - nums3[i] - nums4[j]; count += map.getOrDefault(diff, 0); } }
return count; } }
|