【leetcode 239】滑动窗口

思路:单调队列

  • 维护一个双端队列,存储下标,对应的元素呈递减序。
  • 对于每个窗口,最大值就是单调队列的第一个元素。
class Solution:
    def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
        window = collections.deque()
        ans = list()

        for i, x in enumerate(nums):
            # 弹出不在区间的值
            if i >= k and window[0] <= i - k:
                window.popleft()
            
            # 维护单调队列
            while window and nums[window[-1]] <= x:
                window.pop()
            window.append(i)
            
            # 存储结果
            if i >= k - 1:
                ans.append(nums[window[0]])
        
        return ans

你可能感兴趣的:(编程题,leetcode,算法,数据结构)