思路:
采用自定义单调队列
单调队列主要的三个函数:push() pop() getMax()
1. push(val)
如果队列非空:当 val 比队尾元素大时,删除队尾元素,直到队尾元素比 val 大,将 val 加入队尾
2. pop(val)
如果要删除的元素在队首,删除队首元素;否则不需要删除
3. getMax()
返回队首元素
主函数实现
1. 将前 k 个元素先加入队列中,并找出第一次滑动窗口的最大值加入 res 数组
2. 从 nums 第二个元素开始遍历,删除第 i-1 个元素,加入第 i+k-1 个元素,将本次滑动窗口最大值加入 res 数组
class MyQueue(object):
def __init__(self):
self.queue=deque()
def push(self,val):
# while len(self.queue)!=0 and self.queue[0]<val:
# del self.queue[0]
while len(self.queue)!=0 and self.queue[-1]<val:
del self.queue[-1]
self.queue.append(val)
def pop(self,val):
if val==self.queue[0]:
del self.queue[0]
def getMax(self):
return self.queue[0]
class Solution(object):
def maxSlidingWindow(self, nums, k):
de1=MyQueue()
res=[]
for i in range(0,k):
de1.push(nums[i])
res.append(de1.getMax())
for i in range(1,len(nums)-k+1):
de1.pop(nums[i-1])
de1.push(nums[i+k-1])
res.append(de1.getMax())
return res