利用双端队列,队列存放有可能成为最大数值数字的下标;

class Solution:
    def maxInWindows(self, num, size):
        # write code here
        i = 0
        queue = []
        res = []
        while size > 0 and i < len(num):
            #i表示当前窗口中的最后一个数字下标
            #判断queue[0]是否还在当前窗口中
            if len(queue)>0 and i-size+1 > queue[0]:
                queue.pop(0)
            #如果有num[i]更大,那么目前队列中的队尾数字不可能成为最大值的下标,删除它
            while len(queue)>0 and num[queue[-1]] < num[i]:
                queue.pop()
            queue.append(i)
            #i=size-1时,第一个窗口建立完成,开始记录最大下标
            if i >= size - 1:
                res.append(num[queue[0]])
            i += 1
        return res