每天学习一点算法 2026/04/22
题目:四数相加 II
给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:
0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
为了减少前台循环,我们可以先循环计算两个数组的元素和,再计算两个数组的元素和看是否是之前两个数组和的相反数
javascript
function fourSumCount(nums1: number[], nums2: number[], nums3: number[], nums4: number[]): number {
const map = new Map<number, number>() // 用于记录num1和num2的元素和,key为和,value为出现的次数
const n = nums1.length // 数组长度
// 循环计算 num1 和 num2 的元素和
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
const sum = nums1[i] + nums2[j] // 元素和
// 存储计算结果
if (map.has(sum)) {
map.set(sum, map.get(sum) + 1)
} else {
map.set(sum, 1)
}
}
}
let count = 0 // 满足条件的元组计数
// 循环计算 num2 和 num3 的元素和
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
const sum = nums3[i] + nums4[j] // num2 和 num3 的元素和
if (map.has(-sum)) {
// 找到符合条件的元组计数
count += map.get(-sum)
}
}
}
return count
};
题目来源:力扣(LeetCode)