题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
思路:暴力算法显然不行,采用双端队列的方法
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