Sobes.tech
Middle — Senior

Hogyan lehet deklarálni és fenntartani a maximumot az ablak eltolásakor?

sobes.tech MI

Válasz az MI-től

Az ablak maximális értékének fenntartásához az ablak eltolásakor gyakran használnak adatstruktúrát: egy kétszárnyú sor (deque). Az ötlet az, hogy az elemek indexeit csökkenő érték sorrendben tároljuk, így:

  • Új elem hozzáadásakor a végéről minden kisebb elemet eltávolítunk, mivel nem lehetnek maximumok.
  • Az ablak eltolásakor a sor elejéről eltávolítjuk azokat az elemeket, amelyek kimentek az ablak határain kívül.

Ez lehetővé teszi, hogy az aktuális ablak maximumát O(1) idő alatt kapjuk meg, és az egész tömböt O(n) időben dolgozzuk fel.

Python példával:

from collections import deque

def max_sliding_window(nums, k):
    dq = deque()  # indexeket tárol
    result = []
    for i, num in enumerate(nums):
        while dq and nums[dq[-1]] < num:
            dq.pop()
        dq.append(i)
        if dq[0] == i - k:
            dq.popleft()
        if i >= k - 1:
            result.append(nums[dq[0]])
    return result

# Használati példa
print(max_sliding_window([1,3,-1,-3,5,3,6,7], 3))  # [3,3,5,5,6,7]