Menu
CoddyTech

Merge k Sorted Lists

Du erhältst k Listen mit ganzen Zahlen als Zeilen von lists. Jede Zeile ist in nicht absteigender Reihenfolge sortiert, die Zeilen können unterschiedlich lang sein, und keine Zeile ist leer.

Führe sie zu einer Liste zusammen, die jeden Wert aus jeder Zeile enthält, in nicht absteigender Reihenfolge sortiert ist, und gib sie zurück. Ein Wert, der mehrmals vorkommt, in einer Zeile oder in mehreren, erscheint entsprechend oft im Ergebnis.

Funktion

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
die sortierten Listen, eine pro Zeile, möglicherweise mit unterschiedlicher Länge
Gibt zurückinteger-array
alle Werte aus jeder Zeile in einer sortierten Liste

Einschränkungen

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length, und alle Zeilen zusammen enthalten höchstens 104 Werte
  • -104 ≤ lists[i][j] ≤ 104
  • Jede Zeile ist in nicht absteigender Reihenfolge sortiert.

Beispiele

Eingabe
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
Ausgabe
[1, 2, 3, 4, 5, 6, 9, 10]
Erklärung
Die Zeilen beginnen mit 2, 1 und 3, also kommt 1 zuerst. Die Köpfe sind dann 2, 4 und 3, also folgt 2 und so weiter. Die dritte Zeile endet nach 5, sodass 6, 9 und 10 übrig bleiben.
challenge icon

Weiterführende Frage

Finde den kleinsten Bereich [a, b], der einen Wert aus jeder Zeile enthält. Kann ein Heap der Zeilenköpfe plus des größten Kopfes das in O(N log k) leisten?

Code zurücksetzen
def mergeKLists(lists):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argument

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

Erwartete Ausgabe

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