- 题目
给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i, j, k, l)能满足:
0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
-
解题思路:
这道题目虽然是四个数,但我们通过加法操作也可以让四个数变为两个数,这样就转换成需要在集合中查找元素是否存在的问题。
因此考虑使用哈希表,而这道题还需要记录出现了多少个满足条件的元素,因此应该使用map哈希表。
具体操作如下:
(1)将nums1和nums2中的元素进行两两相加,因为这道题不需要考虑相同的元素,因此两两相加即可;使用map的key键存放相加后元素的值,使用map的value键存放该相加后的元素值出现的次数。
(2)第二步,遍历数组nums3和nums4,将其元素两两相加,和map中的元素进行比较,只要符合条件,定义count,累加count记录满足条件的次数。 -
代码如下:
class Solution {
public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
// 四数之和
// 定义一个map,用来存放nums1和nums2中的元素之和
int res = 0;
Map<Integer, Integer> map = new HashMap<>();
for (int i : nums1) {
for (int j : nums2) {
int temp = i + j;
if (map.containsKey(temp)){
map.put(temp,map.get(temp) + 1);
}else {
map.put(temp,1);
}
}
}
for (int i : nums3) {
for (int j : nums4) {
int temp = i + j;
if (map.containsKey(0-temp)){
res += map.get(0 - temp);
}
}
}
return res;
}
}