[英]Find the number of three sums in a list
如果给你一个清单
numList = [1,2,3,4,5,6,7]
并且要求您查找添加到特定数字的三个总和的数量
target = 10
你怎么能想出答案?
例如, [1,3,6], [1,2,7], [2,3,5], [1,4,5]
将导致返回值为4
。
我知道如何使用基于散列的函数来使用下面的代码为解决方案提供一个三和,但我不确定如何添加所有唯一的三和解。
def find3Numbers(A,arr_size,sum):
for i in range(0,arr_size-1):
#Find pair in subarray A[i+1..n-1]
# with sum equal to sum - A[i]
s = set()
curr_sum = sum - A[i]
for j in range(i+1,arr_size):
if (curr_sum - A[j]) in s:
print("Triplet is", A[i],
", ", A[j], ", ", curr_sum-A[j])
return True
s.add(A[j])
return False
from itertools import combinations
numList = [1,2,3,4,5,6,7]
def check(value):
return sum(value) == 10
filtered = list(filter(check, list(combinations(numList, 3))))
print(filtered)
#[(1, 2, 7), (1, 3, 6), (1, 4, 5), (2, 3, 5)]
组合找到所有可能的组合,然后我只是将其过滤到仅添加到10的组合
您只需调整解决方案来计算解决方案,而不是在找到第一个解决方案后返回:
def find3Numbers(A,arr_size,sum):
count_sums = 0
for i in range(0,arr_size-1):
#Find pair in subarray A[i+1..n-1]
# with sum equal to sum - A[i]
s = set()
curr_sum = sum - A[i]
for j in range(i+1,arr_size):
if (curr_sum - A[j]) in s:
count_sums += 1 # Count here
s.add(A[j])
return count_sums # Finally return the count
请注意,这并不是说您的算法现在是正确的。 接下来,您可能希望使用计数集而不是s
的常规集。 见collections.Counter
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.