利用双端队列,队列存放有可能成为最大数值数字的下标;
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
京公网安备 11010502036488号