题目描述
给定四个包含整数的数组列表 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 。
例如:
输入:
A = [ 1, 2]
B = [-2,-1]
C = [-1, 2]
D = [ 0, 2]
输出:
2
解释:
两个元组如下:
- (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
- (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0
思路
由于有个数限制,而且输出的结果是有多少组,而不是返回下标,这里我们可以直接计算值,满足条件,累加计数。
解答
1. 错误解答
class Solution(object):
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
"""
#用列表接收数据
di = dict()
count = 0
for i in A:
for j in B:
di[i+j] = di.get(i+j, 0) + 1
for k in C:
for l in D:
if -k-l in di:
#因为上面li中可能有相同的值,而li中必是两个不同的i,j位置产生的值,需要统计相同数值个数
count += di[-k-l]
return count
结果:
执行用时 : 360 ms, 在4Sum II的Python提交中击败了75.51% 的用户
内存消耗 : 34.2 MB, 在4Sum II的Python提交中击败了43.48% 的用户
提交时间 | 状态 | 执行用时 | 内存消耗 | 语言 |
几秒前 | 通过 | 360 ms | 34.2MB | python |