思路:暴力算法显然不行,采用双端队列的方法

1、双端队列维护当前窗口的中的最大值

2、如果待处理数字大于队列中最大值,全部pop,将最大值插入

3、如果待处理数字小于队列中最大值,将队列中小于当前值的值pop,将其插入指定位置

4、队列中存储数字的坐标,为了判断队列中值是否已经超出窗口

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param num int整型一维数组 
# @param size int整型 
# @return int整型一维数组
#
class Solution:
    def maxInWindows(self, num, size):
        
        if size == 1:
            return num
        # write code here
        result = []
        que = []
        
        for i in range(len(num)):
            if len(que) == 0:
                que.append(i)
                continue
            
            while len(que) > 0 and i - size + 1 > que[0]:
                que.pop(0)
            
            # 当前值大于队列中值
            while len(que) > 0 and num[i] > num[que[-1]]:
                que.pop()
            que.append(i)
            
            if i >= size - 1:
                result.append(num[que[0]])
            
        return result