Menu
CoddyTech

Sort List

Otrzymujesz jednokierunkową listę połączoną przechowywaną w dwóch tablicach o tej samej długości. Węzeł i przechowuje wartość values[i] i wskazuje na węzeł next[i], -1 oznacza koniec listy, a głową listy jest węzeł 0. Węzły nie są przechowywane w kolejności występowania na liście, a tablice mogą też zawierać pozostałe węzły, do których nie dociera przejście od węzła 0. Nie są one częścią listy, nawet jeśli ich wskaźniki prowadzą do niej.

Posortuj listę rosnąco według wartości i zwróć wartości jej węzłów w tej kolejności.

Funkcja

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
indeks węzła, do którego prowadzi każdy węzeł, lub -1 dla ostatniego węzła
valuesinteger-array
wartość przechowywana przez każdy węzeł
Zwracainteger-array
wartości węzłów listy, od najmniejszej

Ograniczenia

  • 1 ≤ n ≤ 4000, gdzie n jest długością next oraz values.
  • -1000 ≤ values[i] ≤ 1000
  • Każde next[i] ma wartość -1 lub jest indeksem węzła z zakresu od 0 do n-1.
  • Zaczynając od węzła 0, lista dociera do -1, nie odwiedzając żadnego węzła dwukrotnie.
  • Węzły, do których nie dociera przejście od węzła 0, nie są częścią listy. Ich wpisy next mogą wskazywać gdziekolwiek.

Przykłady

Wejście
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
Wyjście
[1, 2, 3, 4, 5]
Wyjaśnienie
Przejście od węzła 0 odwiedza węzły 0, 3, 2, 4, 1, więc lista ma postać 4, 2, 3, 5, 1. Po posortowaniu otrzymujemy 1, 2, 3, 4, 5.
challenge icon

Pytanie dodatkowe

Czy potrafisz posortować, ponownie łącząc węzły, w czasie O(n log n), bez kopiowania wartości?

Zresetuj kod
def sortList(next, values):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

next = [3, -1, 4, 2, 1]
values = [4, 1, 3, 2, 5]

Oczekiwany wynik

[1, 2, 3, 4, 5]