Menu
CoddyTech

Reverse Nodes in k-Group

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

הפוך את הרשימה בקבוצות של k צמתים: הסדר של k הצמתים הראשונים מתהפך, אחריהם מתהפך הסדר של k הצמתים הבאים, וכן הלאה. הקבוצה האחרונה, אם היא מכילה פחות מ-k צמתים, שומרת על הסדר שלה. החזר את הערכים לפי הסדר החדש של הרשימה.

פונקציה

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

אילוצים

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

דוגמאות

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

שאלת המשך

האם תוכל לכתוב זאת באופן רקורסיבי, להפוך קבוצה אחת ולבצע קריאה רקורסיבית על שאר הרשימה? בכמה זיכרון נוסף הדבר משתמש?

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

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

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

הפלט הצפוי

[2, 1, 4, 3, 5]