【发布时间】:2016-01-07 13:48:21
【问题描述】:
假设我有一个列表和另一个元组,它们都已经排序:
A = [10, 20, 30, 40]
B = (20, 60, 81, 90)
我需要将 B 中的所有元素添加到 A 中,以使 A 保持排序状态。
我能想到的解决方案是:
for item in B:
for i in range(0, len(A)):
if item > A[i]:
i += 1
else:
A.insert(i, item)
假设 A 的大小为 m,B 的大小为 n;这个解决方案在最坏的情况下需要 O(mxn),我怎样才能让它表现得更好?
【问题讨论】:
-
查看合并排序中使用的替换合并算法。这需要
O(m+n)时间。 -
我建议您与
sorted(A+B)的幼稚(但可读)版本进行比较。此外,您可能想搜索现有的库,这可能比手工实现要快:grantjenks.com/docs/sortedcontainers -
提示:不要修改任何一个列表;创建一个新的。代码将变得干净而快速。
-
我很快就被否决了...但您表示“A 仍然排序”。它已经排序,所以我的解决方案只是将 B 附加到 A。不知道为什么我会因此受到打击......
-
@Holmes:正确的解决方案应该是
A == [10, 20, 20, 30, 40, 60, 81, 90],而不是B连接到A。
标签: python algorithm optimization