class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
n = len(nums)
if n==0: return []
ans = []
# 定义一个双端队列,队首存储最大值索引
q = collections.deque()
# 先存k个元素到双端队列中,每存一个值要判断一下最大值
for i in range(k):
# 只要q中存的数字比当前数字小,就弹出
while q and nums[i]>=nums[q[-1]]:
q.pop()
q.append(i)
# 先把第一组的最大值存进去
ans.append(nums[q[0]])
for i in range(k,n):
while q and nums[i]>=nums[q[-1]]:
q.pop()
q.append(i)
# 此时还要判断q中队首存的是当前滑动窗口内的最大值,还是先前留下的,故判断一下队首索引值是否处于当前滑动窗口内[i-k],不在就弹出
while q[0] <= i-k:
q.popleft()
ans.append(nums[q[0]])
return ans
06-02
158
09-21
09-21