Menu
CoddyTech

Sliding Window Maximum

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

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

פונקציה

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

אילוצים

  • 1 ≤ k ≤ nums.length ≤ 2 × 104
  • -104 ≤ nums[i] ≤ 104
  • התוצאה מכילה nums.length-k+1 ערכים, אחד לכל חלון, לפי הסדר משמאל לימין.

דוגמאות

קלט
nums = [4, 2, 12, 3, 8, 5, 1]k = 3
פלט
[12, 12, 12, 8, 8]
הסבר
12 נמצא בתוך שלושת החלונות הראשונים, [4, 2, 12], [2, 12, 3] ו-[12, 3, 8]. אחרי שהוא יוצא, בחלונות [3, 8, 5] ו-[8, 5, 1] הערך הגדול ביותר הוא 8.

lock icon+15 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

האם תוכל לבנות תור שתומך בהוספת ערך לסוף, בהסרת הערך מההתחלה ובקריאת הערך המרבי הנוכחי שלו, כל פעולה בזמן O(1) אמורטי?

איפוס הקוד
def maxSlidingWindow(nums, k):
    # כתבו כאן את הקוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

nums = [4, 2, 12, 3, 8, 5, 1]
k = 3

צפוי

[12, 12, 12, 8, 8]