Menu
CoddyTech

Merge k Sorted Lists

困难堆链表python iconjava iconcpp iconc iconjs icon+10

你会得到 k 个整数列表,作为 lists 的各行。每行都按非递减顺序排列,各行长度可以不同,并且没有空行。

将它们合并为一个列表,其中包含所有行中的每个值,并按非递减顺序排列,然后返回该列表。一个值在某一行或多行中出现几次,就在结果中出现几次。

函数

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
按行排列的已排序列表,每行一个,长度可能不同
返回值integer-array
将每一行中的所有值放入一个排序后的列表

约束条件

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length,并且所有行合计最多包含 104 个值
  • -104 ≤ lists[i][j] ≤ 104
  • 每一行都按非递减顺序排列。

示例

输入
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
输出
[1, 2, 3, 4, 5, 6, 9, 10]
解释
各行分别以 2、1 和 3 开头,所以 1 排在最前面。接下来,各行的首项分别是 2、4 和 3,所以接下来是 2,依此类推。第三行在 5 后就结束了,剩下 6、9 和 10。
challenge icon

进阶

找出包含每一行中一个值的最小范围 [a, b]。用行首元素构成的堆,再加上最大的行首元素,能否在 O(N log k) 时间内完成?

重置代码
def mergeKLists(lists):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

lists = [[2, 6, 9], [1, 4, 10], [3, 5]]

预期输出

[1, 2, 3, 4, 5, 6, 9, 10]