Menu
CoddyTech

Merge k Sorted Lists

むずかしいヒープ連結リストpython iconjava iconcpp iconc iconjs icon+10

listsの各行として、k個の整数リストが与えられます。各行は非減少順にソートされており、行ごとに長さが異なる場合があり、空の行はありません。

すべての行のすべての値を含む1つのリストにマージし、非減少順にソートして返してください。1つの行または複数の行に同じ値が複数回現れる場合、結果にもその回数分だけ現れます。

関数

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
行ごとに並べ替えられたリスト。長さは異なる場合があります
戻り値integer-array
すべての行のすべての値を、1つのソート済みリストに

制約

  • 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となり、以降も同様です。3行目は5の後で終わるため、6、9、10が残ります。
challenge icon

発展問題

各行の値を1つずつ含む最小の範囲[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]