包括重复项和倒序对,它们相加为和
numbers = [1, 2, 4, 4, 4, 4, 5, 5, 5, 7, 7, 8, 8, 8, 9]
match = []
for i in range(len(numbers)):
for j in range(len(numbers)):
if (i!=j):
if(numbers[i] + numbers[j] == sum):
match.append([numbers[i], numbers[j]])
我需要检查匹配项和重复项,因此输出需要看起来像[[1, 9], [2, 8], [2, 8], [2, 8], [5, 5], [5, 5], [5, 5], [5, 5], [5, 5], [5, 5], [8, 2], [8, 2], [8, 2], [9, 1]]
正如评论中提到的,一般情况下没有
O(n)
的解决方案,因为在最坏的情况下,您需要输出n^2
对数字,这显然不能在O(n)
时间内完成。但是对于数组中没有等号的情况有线性解,只需使用字典:这是一个变体:
不完全确定多重性是以你想要的方式处理的(在你的例子中,它们是我得到的两倍。。。为什么
[5, 5]
有6个版本?在原始列表中有三个5
,你只能得到3对…)如果列表中有许多重复项,那么根据输出的长度,我建议将代码的最后一部分更改为
^{pr2}$得到结果
相关问题 更多 >
编程相关推荐