Python - 获取列表中的对的总和,该列的值大于没有在多对中使用索引的值

时间:2016-03-19 15:43:05

标签: python

我正在尝试解决一个需要我在列表中找到对的总和的问题。对索引必须是唯一的,即单个索引不应该是多对。 例如 -

my_list = [1,1,2,3,4,5]
sum_greater_than_or_equal_to = 5

这里,我有一个排序列表,想要找到总和大于或等于5的所有对。所以, 我能够通过在另一个循环上找到对来解决O(n ^ 2)中的这个问题。不使用多对索引的对是 -

output = [(1,4),(1,5),(2,3)]

还有另一种更有效的方法吗? 无需创建两个循环?

编辑 - 人们提到包含值的答案 - [(2,4),(2,5),(3,4),(3,5),(4,5)]但我希望如果列表的索引已经在一对中使用,则无法再次使用。

1 个答案:

答案 0 :(得分:1)

以下代码将生成这种对的一种可能组合:

my_list = [1,1,2,3,4,5]

def find_pairs(arr, limit):
    arr = sorted(arr)
    res = []

    start = 0
    end = len(arr) - 1

    while start < end:
        if arr[start] + arr[end] >= limit:
            res.append((arr[start], arr[end]))
            end -= 1
        start += 1

    return res

print find_pairs(my_list, 5) # [(1, 5), (1, 4), (2, 3)]

使用给定的测试集解决方案[(3,4), (2,5)]也是有效的答案。