给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}。
arr = [4,3,5,4,3,3,6,7]
w = 3
res = []
n = len(arr)
qmax = [] #双端队列
for i in range(n):
while len(qmax)!=0 and arr[qmax[-1]] <= arr[i]: #当数组不为空或者新来的比前面的大
qmax.pop()
qmax.append(i)
if qmax[0] == i-w: #老大老了,需要淘汰了
qmax.pop(0)
if i >= w-1: #够三个以后就输出
res.append(arr[qmax[0]])
print(res)