【发布时间】:2011-05-09 13:30:55
【问题描述】:
来自 Google 的 Python 类:
E. Given two lists sorted in increasing order, create and return a merged
list of all the elements in sorted order. You may modify the passed in lists.
Ideally, the solution should work in "linear" time, making a single
pass of both lists.
这是我的解决方案:
def linear_merge(list1, list2):
merged_list = []
i = 0
j = 0
while True:
if i == len(list1):
return merged_list + list2[j:]
if j == len(list2):
return merged_list + list1[i:]
if list1[i] <= list2[j]:
merged_list.append(list1[i])
i += 1
else:
merged_list.append(list2[j])
j += 1
首先,这里可以使用无限循环吗?当我完成合并列表时,是否应该使用 break 关键字跳出循环,或者这里的返回还可以吗?
我在这里看到过类似的问题,所有解决方案看起来都与我的非常相似,即非常类似于 C。没有更多类似python的解决方案了吗?还是因为算法的性质?
【问题讨论】:
-
我明白这是一个“问题”,您应该以某种方式解决它。然而,事实上,如果这是一个“真正的”任务,我只会使用 extend() 和 sort()。确实会是 O(NlgN) 而不是 O(N),但是在 python 中不进行逐项操作所获得的速度优势是相当惊人的。
-
Python 的排序也针对天真的排序不擅长的许多常见情况进行了很好的优化:您可能会得到比这更好的结果。 (我不知道它是否专门针对“对两个已排序的附加列表进行排序”进行了优化。)
-
顺便说一句,当您将此类非答案标记为解决方案时,我不会再花时间详细回答您的问题。它甚至不是一个答案(指向没有原始内容的其他答案的链接属于评论)——他链接的解决方案中没有任何内容实际上显示了如何在 Python 中以一种干净、通用的方式执行上述算法。
-
+1 表示问题 -10 表示所选答案以某种方式计算为 -1。去算数学。
-
@Glenn Maynard 如果我当时有代表,我会发表评论。另外,请阅读他的问题,他不是在要求某人为他做这件事,而是在询问有关此问题的一般性问题。所以我会坚持我所说的,即[所选答案] (stackoverflow.com/questions/464342/…) 我链接到的帖子回答了他的问题。它没有在代码中这样做,但它确实回答了它。