繁体   English   中英

在列表中查找三个总和的数量

[英]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

使用itertools.combinations

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM