[
hash table
2sum
]
Leetcode 0454. 4Sum II
https://leetcode.com/problems/4sum-ii
Let us look at pairs of numbers from A and B and calculate all O(n^2) of them. Next, we look at all pairs from C and D and again calculate all of them. Now, our problem is reduced to 2-sum problem: we need to find two numbers from two lists, such that sum of them equal to 0. There is couple of moments we need to care about:
- There can be duplicates, so we keep
Counter()for our sums. - When we update
ans, we check how many numbers we have in first counter and multiply it by how many times we have for opposite number.
Complexity: total complexity is O(n^2) to look at all pairs from (A, B) and (C, D). Space complexity is also O(n^2). One possible optimization is to first create counters from our lists and work with them directly.
class Solution:
def fourSumCount(self, A, B, C, D):
Cnt1, Cnt2, ans = Counter(), Counter(), 0
for a, b in product(A, B):
Cnt1[a + b] += 1
for c, d in product(C, D):
Cnt2[c + d] += 1
for val in Cnt1:
if -val in Cnt2:
ans += Cnt1[val]*Cnt2[-val]
return ans
If you like the solution, you can upvote it on leetcode discussion section: Problem 0454