Given four integer arrays nums1
, nums2
, nums3
, and nums4
all of length n
, return the number of tuples (i, j, k, l)
such that nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
.
Example:
Input: nums1 = [1, 2], nums2 = [-2,-1], nums3 = [-1, 2], nums4 = [0, 2]
Output: 2
Explanation:
The two tuples are:
1. (0, 0, 0, 1) => 1 + (-2) + (-1) + 2 = 0
2. (1, 1, 0, 0) => 2 + (-1) + (-1) + 0 = 0
问题
给定四个长度为 n
的整数数组 nums1
、nums2
、nums3
和 nums4
,返回使得 nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
的元组 (i, j, k, l)
的数量。
解决方案 1
哈希表方法
Approach 1 / 方法 1
This solution uses a hash table to store the sum of pairs from nums1
and nums2
and then checks for complement sums from nums3
and nums4
.
该解决方案使用哈希表存储 nums1
和 nums2
的对和,然后检查 nums3
和 nums4
的补充和。
Implementation / 实现
python
# Solution 1 implementation in Python
def fourSumCount(nums1, nums2, nums3, nums4):
count = 0
hashmap = {}
# Store the sums of pairs from nums1 and nums2
for a in nums1:
for b in nums2:
if a + b in hashmap:
hashmap[a + b] += 1
else:
hashmap[a + b] = 1
# Find the complement sums from nums3 and nums4
for c in nums3:
for d in nums4:
target = -(c + d)
if target in hashmap:
count += hashmap[target]
return count
Explanation / 解释
- Step 1 / 第一步:
- Initialize a hash table
hashmap
to store sums of pairs fromnums1
andnums2
.
初始化一个哈希表hashmap
用于存储nums1
和nums2
的对和。
- Step 2 / 第二步:
- Iterate through
nums1
andnums2
, compute their pair sums, and store them in the hash table.
遍历nums1
和nums2
,计算它们的对和,并将其存储在哈希表中。
- Step 3 / 第三步:
- Initialize a counter
count
to keep track of valid tuples.
初始化计数器count
以跟踪有效的元组数量。
- Step 4 / 第四步:
- Iterate through
nums3
andnums4
, compute their pair sums, and check if the complement sum exists in the hash table.
遍历nums3
和nums4
,计算它们的对和,并检查哈希表中是否存在补充和。
- Step 5 / 第五步:
- If the complement sum exists, increment the counter by the value from the hash table.
如果存在补充和,将计数器增加哈希表中的值。
Complexity Analysis / 复杂度分析
-
Time Complexity: O(n^2), where n is the length of each array.
时间复杂度: O(n^2),其中n是每个数组的长度。 -
Space Complexity: O(n^2), for storing the pair sums in the hash table.
空间复杂度: O(n^2),用于存储哈希表中的对和。
Key Concept / 关键概念
- Hash table to efficiently find complement sums for the four-array sum problem.
使用哈希表高效找到四数组和问题的补充和。
解决方案 2
双哈希表方法
Approach 2 / 方法 2
This solution uses two hash tables, one for storing sums of pairs from nums1
and nums2
, and another for storing sums of pairs from nums3
and nums4
.
该解决方案使用两个哈希表,一个用于存储 nums1
和 nums2
的对和,另一个用于存储 nums3
和 nums4
的对和。
Implementation / 实现
python
# Solution 2 implementation in Python
def fourSumCount(nums1, nums2, nums3, nums4):
count = 0
hashmap1 = {}
hashmap2 = {}
# Store the sums of pairs from nums1 and nums2 in hashmap1
for a in nums1:
for b in nums2:
if a + b in hashmap1:
hashmap1[a + b] += 1
else:
hashmap1[a + b] = 1
# Store the sums of pairs from nums3 and nums4 in hashmap2
for c in nums3:
for d in nums4:
if c + d in hashmap2:
hashmap2[c + d] += 1
else:
hashmap2[c + d] = 1
# Find common sums in hashmap1 and hashmap2
for sum1 in hashmap1:
if -sum1 in hashmap2:
count += hashmap1[sum1] * hashmap2[-sum1]
return count
Explanation / 解释
- Step 1 / 第一步:
- Initialize two hash tables
hashmap1
andhashmap2
to store sums of pairs fromnums1
&nums2
, andnums3
&nums4
respectively.
初始化两个哈希表hashmap1
和hashmap2
用于分别存储nums1
和nums2
、nums3
和nums4
的对和。
- Step 2 / 第二步:
- Iterate through
nums1
andnums2
, compute their pair sums, and store them inhashmap1
.
遍历nums1
和nums2
,计算它们的对和,并将其存储在hashmap1
中。
- Step 3 / 第三步:
- Iterate through
nums3
andnums4
, compute their pair sums, and store them inhashmap2
.
遍历nums3
和nums4
,计算它们的对和,并将其存储在hashmap2
中。
- Step 4 / 第四步:
- Initialize a counter
count
to keep track of valid tuples.
初始化计数器count
以跟踪有效的元组数量。
- Step 5 / 第五步:
- Iterate through
hashmap1
, and for each sum inhashmap1
, check if the negative sum exists inhashmap2
.
遍历hashmap1
,对于hashmap1
中的每个和,检查hashmap2
中是否存在相反数。
- Step 6 / 第六步:
- If the negative sum exists, increment the counter by the product of the values from both hash tables.
如果存在相反数,将计数器增加两个哈希表中的值的乘积。
Complexity Analysis / 复杂度分析
-
Time Complexity: O(n^2), where n is the length of each array.
时间复杂度: O(n^2),其中n是每个数组的长度。 -
Space Complexity: O(n^2), for storing the pair sums in the hash tables.
空间复杂度: O(n^2),用于存储哈希表中的对和。
Key Concept / 关键概念
- Using two hash tables to efficiently find complement sums for the four-array sum problem.
使用两个哈希表高效找到四数组和问题的补充和。
Comparison / 比较
Comparison Between All Approaches
-
Algorithm:
-
Approach 1 (Single Hash Table):
- Uses one hash table to store sums of pairs from
nums1
andnums2
, and finds complements fromnums3
andnums4
.
- Uses one hash table to store sums of pairs from
-
Approach 2 (Double Hash Table):
- Uses two hash tables, one for sums of pairs from
nums1
&nums2
, and another for sums fromnums3
&nums4
.
- Uses two hash tables, one for sums of pairs from
-
-
Efficiency:
-
Time Complexity:
- Both approaches have a time complexity of O(n^2), where n is the length of each array.
-
Space Complexity:
- Both approaches have a space complexity of O(n^2) for storing pair sums in hash tables.
-
-
Readability and Maintainability:
- Approach 1 (Single Hash Table):
- Simple and uses
one hash table, making it easier to understand and implement.
- Approach 2 (Double Hash Table):
- Slightly more complex due to the use of two hash tables but can be more intuitive in separating pair sums.
- Approach 1 (Single Hash Table):
-
Best Practice:
- Recommended Solution: Approach 1 (Single Hash Table):
- Reason: Approach 1 is preferred due to its simplicity and minimal use of data structures, making it easier to follow and maintain.
- Recommended Solution: Approach 1 (Single Hash Table):
Summary / 总结
- Use Approach 1 for a simple and clear solution, ensuring readability and maintainability.
- Approach 1’s single hash table method is straightforward and effective.
Tips / 提示
- Hash tables are powerful tools for efficiently finding complement sums in multiple array problems.
- Ensure to handle edge cases such as empty arrays or no valid tuples.
Solution Template for similar questions / 提示
- Use hash table methods to efficiently store and find pair sums in multi-array problems.
- Implement multiple hash tables for clear separation of pair sums if needed.
What does the main algorithm of this question aim to test? / 这个问题的主要算法旨在测试什么?
Understanding of hash table techniques and their application in multi-array sum problems.
Leave a Reply