class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
# 思路是使用单调队列,把滑动窗口中最大的元素放在最头
que=collections.deque()
n=len(nums)
res=[]
# 初始化队列,队头保存最大的数的下标,因为需要下标来判断滑动窗口长度
for i in range(k):
while que and nums[i] >= nums[que[-1]]:
que.pop()
que.append(i)
res.append(nums[que[0]])
# 后k个元素
for i in range(k,n):
while que and nums[i]>=nums[que[-1]]:
que.pop()
que.append(i)
# 判断窗口大小是不是等于k
while que and i-k>=que[0]:
que.popleft()
res.append(nums[que[0]])
return res
思路:
- 单调队列(队列初始化que=collections.deque())
- 还是单调队列,这个感觉很有意思
- 初始化,和判断队列窗口长度
- 这是滑动窗口非常经典的一道题