版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/87931870
不能每次选取范围再比较,这样时间复杂度太高。可以创建一个队列,队列首部是最大值索引,每次要先去掉小于当前数的所有索引,再去掉滑动窗口外的索引:
# -*- coding:utf-8 -*-
class Solution:
def maxInWindows(self, num, size):
# write code here
res, queue = [], [] # 结果,索引队列
if size == 0:
return res
for i in range(len(num)):
begin = i-size+1 # 开始的位置
while queue and num[queue[-1]] < num[i]: # 去掉小于i处数的所有索引
queue.pop(-1)
while queue and begin > queue[0]: # 去掉过了的最大数索引
queue.pop(0)
queue.append(i)
if begin >= 0:
res.append(num[queue[0]])
return res