思路:单调队列
- 维护一个双端队列,存储下标,对应的元素呈递减序。
- 对于每个窗口,最大值就是单调队列的第一个元素。
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