Menu
CoddyTech

Sort List

נתונה לך רשימה מקושרת חד־כיוונית המאוחסנת בשני מערכים באותו אורך. צומת i מכיל את הערך values[i] ומקושר לצומת next[i], -1 מסיים את הרשימה, והראש הוא צומת 0. הצמתים אינם מאוחסנים לפי סדר הרשימה, והמערכים עשויים להכיל גם צמתים שנותרו, שהמעבר מצומת 0 לעולם אינו מגיע אליהם. צמתים אלה אינם חלק מהרשימה, גם אם הקישורים שלהם מצביעים אליה.

מיין את הרשימה בסדר לא יורד לפי הערך והחזר את ערכי הצמתים שלה בסדר זה.

פונקציה

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
האינדקס של הצומת שאליו כל צומת מקושר, או -1 עבור הצומת האחרון
valuesinteger-array
הערך שמוחזק בכל צומת
מחזירהinteger-array
הערכים של איברי הרשימה, מהקטן לגדול

אילוצים

  • 1 ≤ n ≤ 4000, כאשר n הוא האורך של next ושל values.
  • -1000 ≤ values[i] ≤ 1000
  • כל next[i] הוא -1 או אינדקס של צומת בין 0 ל־n-1.
  • החל מצומת 0, הרשימה מגיעה אל -1 בלי לבקר באותו צומת פעמיים.
  • צמתים שהמעבר החל מהצומת 0 אינו מגיע אליהם אינם חלק מהרשימה. הערכים שלהם ב-next יכולים להצביע לכל מקום.

דוגמאות

קלט
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
פלט
[1, 2, 3, 4, 5]
הסבר
ההליכה מהצומת 0 מבקרת בצמתים 0, 3, 2, 4, 1, ולכן הרשימה היא 4, 2, 3, 5, 1. לאחר מיון, מתקבל 1, 2, 3, 4, 5.
challenge icon

שאלת המשך

האם תוכל למיין על ידי קישור מחדש של הצמתים בזמן O(n log n), בלי להעתיק את הערכים החוצה?

איפוס הקוד
def sortList(next, values):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

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

הפלט הצפוי

[1, 2, 3, 4, 5]