# 生成窗口最大值数组
from collections import deque
from array import array
def getMaxWindow(arr:array, w:int)->list:
if not arr or w < 1 or len(arr) < w:
return None
qmax = deque()
res = array('i', range(len(arr)-w+1))
index = 0
for i in range(len(arr)):
while qmax and arr[qmax[-1]] <= arr[i]:
qmax.pop()
qmax.append(i)
if qmax[0] == i - w:
qmax.popleft()
if i >= w - 1:
res[index] = arr[qmax[0]]
index += 1
return res
if __name__ == "__main__":
arr = array('i', [4, 3, 5, 4, 3, 3, 6, 7])
res = getMaxWindow(arr, 3)
print(res)