Menu
CoddyTech

Sliding Window Maximum

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

פונקציה

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 נמצא בתוך שלושת החלונות הראשונים, ולכן כל אחד מהם מחזיר 12. לאחר שהוא יוצא בהחלקה, הערך הגדול ביותר גם ב-[3, 8, 5] וגם ב-[8, 5, 1] הוא 8.
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]