454. 4Sum II
题目
简单来说就是从ABCD中各取出一个数字,使他们的和为0。
简单来说就是要利用好 { } dict的特性。
下面,使用了一个ab dict
简单的二行解法
class Solution:
def fourSumCount(self, A, B, C, D):
AB = collections.Counter(a+b for a in A for b in B)
return sum(AB[-c-d] for c in C for d in D)
使用更多的dict提高了效率。
高效解法
class Solution:
def fourSumCount(self, A: List[int], B: List[int], C: List[int], D: List[int]) -> int:
A_dict = {}
for i in A:
if i in A_dict:
A_dict[i] += 1
else:
A_dict[i] = 1
B_dict = {}
for i in B:
if i in B_dict:
B_dict[i] += 1
else:
B_dict[i] = 1
C_dict = {}
for i in C:
if i in C_dict:
C_dict[i] += 1
else:
C_dict[i] = 1
D_dict = {}
for i in D:
if i in D_dict:
D_dict[i] += 1
else:
D_dict[i] = 1
AB = {}
for i in A_dict:
for j in B_dict:
if i+j in AB:
AB[i+j] += A_dict[i] * B_dict[j]
else:
AB[i+j] = A_dict[i] * B_dict[j]
count = 0
for i in C_dict:
for j in D_dict:
if -i-j in AB:
count += C_dict[i] * D_dict[j] * AB[-i-j]
return count