给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。
为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。
本题如果暴力解决,那么时间复杂度为O(n^4)。
如果将按个数组元素的和保存在哈希表中,那么时间复杂度为O(n^3)。
我们将两个数组元素的和放到一个哈希表中,可以控制复杂度在O(n^2)。
from typing import *
from collections import defaultdict
class Solution:
def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
dic1 = defaultdict(int)
for a in A:
for b in B:
dic1[a + b] += 1
res = 0
for c in C:
for d in D:
res += dic1[-(c + d)]
return res