Menu
CoddyTech

Sort List

Ti viene fornita una lista semplicemente concatenata memorizzata in due array della stessa lunghezza. Il nodo i contiene il valore values[i] e punta al nodo next[i]; -1 indica la fine della lista e la testa è il nodo 0. I nodi non sono memorizzati nell'ordine della lista e gli array possono contenere anche nodi residui che la visita a partire dal nodo 0 non raggiunge mai. Questi nodi non fanno parte della lista, anche se i loro collegamenti puntano al suo interno.

Ordina la lista in ordine non decrescente di valore e restituisci i valori dei suoi nodi in quest'ordine.

Funzione

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
l'indice del nodo a cui è collegato ciascun nodo, oppure -1 per l'ultimo nodo
valuesinteger-array
il valore contenuto in ciascun nodo
Restituisceinteger-array
i valori dei nodi della lista, dal più piccolo al più grande

Vincoli

  • 1 ≤ n ≤ 4000, dove n è la lunghezza di next e di values.
  • -1000 ≤ values[i] ≤ 1000
  • Ogni next[i] è -1 oppure un indice di nodo da 0 a n-1.
  • Partendo dal nodo 0, la lista raggiunge -1 senza visitare due volte lo stesso nodo.
  • Nodi che il percorso dal nodo 0 non raggiunge non fanno parte della lista. Le loro voci next possono puntare ovunque.

Esempi

Input
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
Output
[1, 2, 3, 4, 5]
Spiegazione
Il percorso dal nodo 0 visita i nodi 0, 3, 2, 4, 1, quindi la lista è 4, 2, 3, 5, 1. Ordinata, diventa 1, 2, 3, 4, 5.
challenge icon

Per approfondire

Riesci a ordinare ricollegando i nodi in tempo O(n log n), senza copiare i valori all'esterno?

Ripristina il codice
def sortList(next, values):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

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

Output atteso

[1, 2, 3, 4, 5]