【发布时间】:2017-11-19 10:34:07
【问题描述】:
我在 python 中编写了两个解决方案。它应该获取一个数字列表并对相加为和的数字进行排序,这两个都返回相同的对,但哪个更有效?我不确定使用 python 的 count 方法是否在幕后做更多的工作,使第二个更长
numbers = [1, 2, 4, 4, 4, 4, 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]])
match2 = []
for i in range(len(numbers)):
counterPart = abs(numbers[i] - sum)
numberOfCounterParts = numbers.count(counterPart)
if(numberOfCounterParts >= 1):
if(counterPart == numbers[i]):
for j in range(numbers.count(counterPart)-1):
match2.append([numbers[i], counterPart])
else:
for j in range(numbers.count(counterPart)):
match2.append([numbers[i], counterPart])
我还缺少更好的解决方案吗?
【问题讨论】:
-
老实说,它们都不是有效的解决方案,使用字典是要走的路。你的算法是 O(n^2)。
-
@Ding 您是否建议以编程方式将列表转换为字典?使键成为索引?
-
循环遍历列表,对于每个数字
x,使用sum-x作为键,x作为值。这样,您只需浏览列表一次。 -
@Ding 你确定这是我应该采取的方法吗?因为我做了一些搜索,发现了这个stackoverflow.com/questions/3420937/… 哪个最佳答案使用了不使用字典的递归函数
标签: python algorithm performance sorting search