Menu
CoddyTech

Merge k Sorted Lists

Otrzymujesz k list liczb całkowitych jako wiersze lists. Każdy wiersz jest posortowany w porządku niemalejącym, wiersze mogą mieć różne długości i żaden wiersz nie jest pusty.

Połącz je w jedną listę zawierającą wszystkie wartości ze wszystkich wierszy, posortowaną w porządku niemalejącym, i zwróć ją. Wartość, która występuje kilka razy, w jednym lub kilku wierszach, występuje w wyniku tyle samo razy.

Funkcja

mergeKLists(lists: integer-2d-array) → integer-array
listsinteger-2d-array
posortowane listy, po jednej w każdym wierszu, o potencjalnie różnych długościach
Zwracainteger-array
każda wartość z każdego wiersza, w jednej posortowanej liście

Ograniczenia

  • 1 ≤ lists.length ≤ 104
  • 1 ≤ lists[i].length, a wszystkie wiersze łącznie zawierają co najwyżej 104 wartości
  • -104 ≤ lists[i][j] ≤ 104
  • Każdy wiersz jest posortowany w kolejności nierosnącej.

Przykłady

Wejście
lists = [[2, 6, 9], [1, 4, 10], [3, 5]]
Wyjście
[1, 2, 3, 4, 5, 6, 9, 10]
Wyjaśnienie
Wiersze zaczynają się od 2, 1 i 3, więc najpierw występuje 1. Głowy mają następnie wartości 2, 4 i 3, więc po nim występuje 2 i tak dalej. W trzecim wierszu kończą się liczby po 5, pozostawiając 6, 9 i 10.
challenge icon

Pytanie dodatkowe

Znajdź najmniejszy przedział [a, b] zawierający wartość z każdego wiersza. Czy kopiec głów wierszy oraz największa głowa pozwolą to zrobić w czasie O(N log k)?

Zresetuj kod
def mergeKLists(lists):
    # Wpisz tutaj kod

Test #1

Test #2

Test #3

Argument

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

Oczekiwany wynik

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