哈希算法题目:四数相加 II
字数 1265 2025-10-26 09:00:43
哈希算法题目:四数相加 II
题目描述
给定四个整数数组 nums1、nums2、nums3 和 nums4,数组长度均为 n。请计算有多少个元组 (i, j, k, l) 满足:
0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
示例
输入:
nums1 = [1, 2], nums2 = [-2, -1], nums3 = [-1, 2], nums4 = [0, 2]
输出:
2
解释:
两个元组为:
- (0, 0, 0, 1) → 1 + (-2) + (-1) + 2 = 0
- (1, 1, 0, 0) → 2 + (-1) + (-1) + 0 = 0
解题过程
步骤 1:暴力法的局限性
最直接的方法是遍历所有四元组(四层循环),检查和是否为 0。时间复杂度为 \(O(n^4)\),当 \(n=100\) 时计算量已达 \(10^8\),不可行。
步骤 2:分组优化思路
将四个数组分为两组:
- 组 A:
nums1和nums2,计算所有可能的和 \(a + b\)。 - 组 B:
nums3和nums4,计算所有可能的和 \(c + d\)。
问题转化为:找到多少对(a+b, c+d)满足(a+b) + (c+d) = 0,即a+b = -(c+d)。
步骤 3:哈希表的作用
-
遍历
nums1和nums2,用哈希表map记录所有a+b的值及其出现次数。- 例如:
nums1=[1,2],nums2=[-2,-1],可能的和包括:- 1 + (-2) = -1(出现 1 次)
- 1 + (-1) = 0(出现 1 次)
- 2 + (-2) = 0(出现 1 次)
- 2 + (-1) = 1(出现 1 次)
- 哈希表:
{-1:1, 0:2, 1:1}
- 例如:
-
遍历
nums3和nums4,计算c+d的值,检查-(c+d)是否在哈希表中。若存在,则将对应的出现次数累加到结果中。- 例如:
nums3=[-1,2],nums4=[0,2],可能的和包括:- -1 + 0 = -1 → 需找
-(-1) = 1,在哈希表中出现 1 次 → 计数 +1 - -1 + 2 = 1 → 需找
-(1) = -1,在哈希表中出现 1 次 → 计数 +1 - 2 + 0 = 2 → 需找
-2,不存在 → 忽略 - 2 + 2 = 4 → 需找
-4,不存在 → 忽略
- -1 + 0 = -1 → 需找
- 总计数 = 1 + 1 = 2
- 例如:
步骤 4:复杂度分析
- 时间复杂度:\(O(n^2)\)(两组双层循环)。
- 空间复杂度:\(O(n^2)\)(哈希表存储最多 \(n^2\) 个键值对)。
关键点
通过分组将问题降维,利用哈希表快速查询互补值,避免暴力枚举。此方法可推广到类似的多数组求和问题(如“两数之和”的扩展)。