Twosum实现的变体

时间:2018-07-14 18:53:54

标签: python-3.x algorithm dynamic-programming

我有一个代码,给定一个数组和目标和,我的代码返回一对两个整数,它们加起来就是和。 Python函数如下

def pairSum2(arr, k):
    if len(arr)<2:
        return
    seen=set()
    output=set()
    for num in arr:
        target=k-num
        if target not in seen:
            seen.add(num)
        else:
            output.add( (min(num, target), max(num, target)) )
    print ('\n'.join( map(str, list(output)) ))

我必须对其进行修改,以使给定总和,找出数组中最大可能组合为<= sum:

  1. 每个组合中最多可以包含两个数字,找出可以进行多少个组合。

我提到了子集和问题Subset Sum algorithm。该算法如何打印所有加起来为总和的子集。我被允许一次<=两个数字。

1 个答案:

答案 0 :(得分:0)

我希望它会有所帮助。
只需对数组排序并找到最小的数,例如a <= sum。接着 , 让我们有变量i,j,k。 j = a的索引,count = 0

 while(i<j){
 k=j;
 while(k>sum-i && k>i)
 k--;
 //Unique combinations that will give count of pairs having add upto specified 
 //sum
 if(k>i)
 count=count+k-i;
 i++;
 }`