Menu
CoddyTech

Sort List

Aynı uzunluktaki iki dizide saklanan tek yönlü bağlı bir liste veriliyor. i düğümü values[i] değerini tutar ve next[i] düğümüne bağlanır, -1 listenin sonunu belirtir ve baş düğüm 0'dır. Düğümler liste sırasına göre saklanmaz ve dizilerde, 0 düğümünden başlayarak ilerlerken hiç ulaşılamayan artık düğümler de bulunabilir. Bağlantıları listeye işaret etse bile bunlar listenin parçası değildir.

Listeyi değerlerine göre azalmayan sırada sıralayın ve düğümlerinin değerlerini bu sırayla döndürün.

Fonksiyon

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
her düğümün bağlantı verdiği düğümün dizini veya son düğüm için -1
valuesinteger-array
her bir düğümün tuttuğu değer
Döndürürinteger-array
listenin düğümlerinin değerleri, en küçükten başlayarak

Kısıtlar

  • 1 ≤ n ≤ 4000; burada n, next ve values uzunluğudur.
  • -1000 ≤ values[i] ≤ 1000
  • Her next[i], -1 veya 0 ile n-1 arasında bir düğüm indeksidir.
  • Başlangıç düğümü 0 olan liste, hiçbir düğümü iki kez ziyaret etmeden -1 değerine ulaşır.
  • Düğüm 0'dan başlayan yürüyüşün ulaşmadığı düğümler listenin parçası değildir. Bunların next girdileri herhangi bir yeri gösterebilir.

Örnekler

Girdi
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
Çıktı
[1, 2, 3, 4, 5]
Açıklama
0 düğümünden başlayan yürüyüş 0, 3, 2, 4, 1 düğümlerini ziyaret eder; dolayısıyla liste 4, 2, 3, 5, 1 şeklindedir. Sıralandığında 1, 2, 3, 4, 5 olur.
challenge icon

Ek soru

Sıralı değerleri kopyalamadan, O(n log n) sürede düğümleri yeniden bağlayarak sıralama yapabilir misin?

Kodu sıfırla
def sortList(next, values):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

[1, 2, 3, 4, 5]