Menu
CoddyTech

Merge Two Sorted Lists

Otrzymujesz dwie jednokierunkowe listy połączone, każdą zapisaną w dwóch tablicach o tej samej długości. Na pierwszej liście węzeł i przechowuje wartość values1[i] i wskazuje węzeł next1[i]. Druga lista działa tak samo, używając next2 i values2. W obu listach -1 oznacza koniec listy, a głową jest węzeł 0. Węzły nie są zapisane w kolejności, w jakiej występują na liście, więc podążaj za odnośnikami.

Każda lista jest posortowana w kolejności niemalejącej wzdłuż odnośników. Połącz je w jedną posortowaną listę i zwróć jej wartości w kolejności.

Funkcja

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
indeks węzła, z którym łączy się każdy węzeł pierwszej listy, lub -1 dla jej ostatniego węzła
values1integer-array
wartość przechowywana w każdym węźle pierwszej listy
next2integer-array
indeks węzła, do którego odwołuje się każdy węzeł drugiej listy, lub -1 dla jej ostatniego węzła
values2integer-array
wartość przechowywana przez każdy węzeł drugiej listy
Zwracainteger-array
wartości scalonej listy, w kolejności

Ograniczenia

  • 1 ≤ L1 ≤ 2000, gdzie L1 jest długością next1 i values1.
  • 1 ≤ L2 ≤ 2000, gdzie L2 to długość next2 i values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Każdy element next1 to -1 lub indeks węzła z pierwszej listy, a każdy element next2 to -1 lub indeks węzła z drugiej listy.
  • Rozpoczynając od węzła 0, każda lista odwiedza każdy ze swoich węzłów dokładnie raz, a następnie dociera do -1. Nie ma cyklu.
  • Wzdłuż swoich połączeń każda lista jest posortowana w kolejności nierosnącej.

Przykłady

Wejście
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Wyjście
[1, 2, 3, 4, 6, 7, 9]
Wyjaśnienie
Podążając za linkami, pierwsza lista odwiedza węzły 0, 2, 1 i odczytuje 1, 4, 6; druga odczytuje 2, 3, 7, 9. Za każdym razem wybierając mniejszy element z początku listy, otrzymujemy 1, 2, 3, 4, 6, 7, 9.
challenge icon

Pytanie dodatkowe

Czy potrafisz scalić k posortowanych list w czasie O(N log k), gdzie N to łączna liczba węzłów?

Zresetuj kod
def mergeTwoLists(next1, values1, next2, values2):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

Oczekiwany wynik

[1, 2, 3, 4, 6, 7, 9]