我正在尝试解决一个需要我在列表中找到对的总和的问题。对索引必须是唯一的,即单个索引不应该是多对。 例如 -
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)]
但我希望如果列表的索引已经在一对中使用,则无法再次使用。
答案 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)]
也是有效的答案。