Menu
CoddyTech

Next Permutation

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

אם nums הוא כבר הסידור הגדול ביותר, אין סידור אחריו: החזר את הסידור הקטן ביותר, שבו הערכים ממוינים בסדר עולה. שאף לזמן ריצה של O(n) ולזיכרון נוסף של O(1).

פונקציה

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
הסידור הנוכחי של הערכים
מחזירהinteger-array
הסידור הבא לפי סדר מילוני, או הערכים ממוינים בסדר עולה אם nums הוא הגדול ביותר

אילוצים

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 1000

דוגמאות

קלט
nums = [2, 5, 4, 1]
פלט
[4, 1, 2, 5]
הסבר
הזנב 5, 4, 1 יורד, לכן המספר 2 שלפניו חייב לגדול. ערך הזנב הקטן ביותר שגדול מ־2 הוא 4; הצב אותו שם ואת השאר בסדר עולה: [4, 1, 2, 5].
challenge icon

שאלת המשך

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

איפוס הקוד
def nextPermutation(nums):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

nums = [2, 5, 4, 1]

הפלט הצפוי

[4, 1, 2, 5]