Menu
CoddyTech

Sort List

Bạn có một danh sách liên kết đơn được lưu trong hai mảng có cùng độ dài. Nút i chứa giá trị values[i] và liên kết đến nút next[i], -1 đánh dấu kết thúc danh sách và nút đầu là nút 0. Các nút không được lưu theo thứ tự trong danh sách, và các mảng cũng có thể chứa những nút còn sót lại mà quá trình duyệt từ nút 0 không bao giờ đến được. Những nút đó không thuộc danh sách, ngay cả khi liên kết của chúng trỏ vào danh sách.

Sắp xếp danh sách theo thứ tự giá trị không giảm và trả về các giá trị của các nút theo thứ tự đó.

Hàm

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
chỉ số của nút mà mỗi nút liên kết đến, hoặc -1 đối với nút cuối cùng
valuesinteger-array
giá trị mà mỗi nút lưu giữ
Trả vềinteger-array
các giá trị của các nút trong danh sách, bắt đầu từ giá trị nhỏ nhất

Ràng buộc

  • 1 ≤ n ≤ 4000, trong đó n là độ dài của next và values.
  • -1000 ≤ values[i] ≤ 1000
  • Mỗi next[i] là -1 hoặc chỉ số của một nút từ 0 đến n-1.
  • Bắt đầu từ nút 0, danh sách đến -1 mà không đi qua một nút nào hai lần.
  • Các nút mà quá trình duyệt bắt đầu từ nút 0 không tới được thì không thuộc danh sách. Các mục next của chúng có thể trỏ đến bất cứ đâu.

Ví dụ

Đầu vào
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
Đầu ra
[1, 2, 3, 4, 5]
Giải thích
Đường đi từ nút 0 ghé thăm các nút 0, 3, 2, 4, 1, nên danh sách có các giá trị 4, 2, 3, 5, 1. Sau khi sắp xếp, ta có 1, 2, 3, 4, 5.
challenge icon

Câu hỏi mở rộng

Bạn có thể sắp xếp bằng cách liên kết lại các nút trong thời gian O(n log n) mà không sao chép các giá trị ra ngoài không?

Đặt lại code
def sortList(next, values):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

[1, 2, 3, 4, 5]