我在python中写了两个解决方案。它应该取一个数字列表并排序合计一个数字,这两个返回相同的对,但哪一个更有效?我不知道,如果使用Python的计数方法会使得第二个长哪种算法可以更快地对这些数字对进行排序?
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])
幕后更多的工作是否有一个更好的解决方案,我失踪?
检查自己,https://stackoverflow.com/a/7370824/3462319 – depperm
说实话,他们两人都没有有效的解决方案,使用字典是要走的路。你的算法是O(n^2)。 – Ding
@Ding你会建议将列表转换为字典编程?关键指标? – joe