【题目】 454. 四数相加 II
【题目考察】:哈希法、数组
【目标复杂度】: O(n^2)
【解法】:
解法: 我们可以将四个数组分成两部分,A 和 B 为一组,C 和 D 为另外一组。
对于 A 和 B,我们使用二重循环对它们进行遍历,得到所有 A[i]+B[j], 如果在C和D中存在 -(A[i]+B[j]), 那么代表对应的数值相加得到的值是0, 所以我们将-(A[i]+B[j])作为key, -(A[i]+B[j]) 出现的次数作为值存入哈希映射中。
对于 C 和 D,我们同样使用二重循环对它们进行遍历。如果C[k]+D[l] 的值是哈希映射的一个key,那么代表他们相加得到的是0,接着取出次数进行加和。
时间复杂度: O(n^2)
空间复杂度: O(1)
【代码】:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @param {number[]} nums3
* @param {number[]} nums4
* @return {number}
*/
var fourSumCount = function(nums1, nums2, nums3, nums4) {
let hashMap = new Map();
let count = 0;
for (let i = 0; i < nums1.length; i++) {
for (let j = 0; j < nums2.length; j++) {
const tempSum = -(nums1[i] + nums2[j])
hashMap.set(tempSum, (hashMap.get(tempSum) || 0) + 1);
}
}
for (let i = 0; i < nums3.length; i++) {
for (let j = 0; j < nums4.length; j++) {
if (hashMap.has(nums3[i] + nums4[j])) {
count+= hashMap.get(nums3[i] + nums4[j])
}
}
}
return count;
};