这是我的代码。
我能在输入以下内容后得到答案:
但是当我尝试稍作更改时,它已经不能正常工作了。
def merge_lists(all_lst):
if len(all_lst) < 2:
return all_lst[0] # get rid of the extra []
left = merge_lists(all_lst[:len(all_lst)//2]) #[[2, 7, 10]] ##[[0, 4, 6]]
right = merge_lists(all_lst[len(all_lst)//2:])#[[0, 4, 6], [3, 11]] ##[[3,11]]
def merge(left,right):
results = []
while left and right:
if left[0] < right[0]:
results.append(left[0])
left.remove(left[0])
else:
results.append(right[0])
right.remove(right[0])
results.extend(left)
results.extend(right)
return results
return merge(left, right)
我能在输入以下内容后得到答案:
all_lst = [[2, 7, 10], [0, 4, 6], [3, 11]]
print(merge_lists(all_lst)) # [0, 2, 3, 4, 6, 7, 10, 11]
但是当我尝试稍作更改时,它已经不能正常工作了。
all_lst = [[2, 7, 10], [0, 4, 6], [3, 11, 1]]
print(merge_lists(all_lst)) ##[0, 2, 3, 4, 6, 7, 10, 11, 1]
我能知道出了什么问题吗?
sorted(itertools.chain.from_iterable(all_lst))
,或者如果你的列表都是排序好的,可以使用list(heapq.merge(*all_lst))
。 - Jon Clementsheapq
可以得到一个O(log k * n)
的算法,其中k
是列表的数量,n
是元素的总数。 - Niklas B.