class Solution:
def fourSumCount(self, A, B, C, D):
"""
:type A: List[int]
:type B: List[int]
:type C: List[int]
:type D: List[int]
:rtype: int
"""
# 如果暴力做法就会是O(n^4) 且 0 ≤ N ≤ 500
# 那么62500000000 这个数量级肯定是不行的
# 因为我们要计数, 所以要用map 或者说是dict
# 要注意的是, 没有进行特殊情况的判断
d = {}
for item1 in C:
for item2 in D:
d[item1 + item2] =d.get(item1 + item2, 0) + 1
res = 0
# 时间复杂度 O(n^2)
# 空间复杂度 O(n^2) 因为a中每一个值 都要与b中的每一个值进行相加,
# 一般情况下, 他们的数值是不相等的
for item3 in A:
for item4 in B:
tmp = -item3 - item4
res += d.get(tmp, 0)
return res
if __name__ == '__main__':
A = [1, 2]
B = [-2, -1]
C = [-1, 2]
D = [0, 2]
sol = Solution()
res = sol.fourSumCount(A, B, C, D)
print(res)
leetcode454. 四数相加 II
最新推荐文章于 2024-05-06 12:43:06 发布