📅  最后修改于: 2023-12-03 15:07:28.130000             🧑  作者: Mango
将多个有序数组合并成一个有序数组通常使用归并排序的思想。类似地,我们可以从K个有序数组中选择K个最小元素进行合并,直到只有一个元素为止。
import heapq
def merge_k_lists(lists):
if not lists:
return []
k = len(lists)
heap = [(l[0], i, 0) for i, l in enumerate(lists) if l]
heapq.heapify(heap)
merged = []
while heap:
val, list_idx, element_idx = heapq.heappop(heap)
merged.append(val)
if element_idx + 1 < len(lists[list_idx]):
heapq.heappush(heap, (lists[list_idx][element_idx + 1], list_idx, element_idx + 1))
return merged
该算法的时间复杂度为O(NlogK),其中N为数组的总元素个数,K为数组个数。