239. 滑动窗口最大值
题目描述: 239. 滑动窗口最大值.
解法
from collections import deque
class Myqueue:
def __init__(self):
self.queue = deque()
def pop(self, x):
if self.queue and x == self.queue[0]:
self.queue.popleft()
def push(self,x):
while self.queue and self.queue[-1] < x:
self.queue.pop()
self.queue.append(x)
def front(self):
if self.queue:
return self.queue[0]
class Solution(object):
def maxSlidingWindow(self, nums, k):
que = Myqueue()
res = []
for i in range(k-1):
que.push(nums[i])
for i in range(k-1,len(nums)):
if i >= k :
que.pop(nums[i-k])
que.push(nums[i])
res.append(que.front())
return res
首先记录一下deque的用法:
deque是一个亮相队列可以完成:
1.单个数据入队
append是在尾部入队,appendleft是在队头入队
2.多个数据入队(可迭代对象)
extend是在尾部多数据入队,extendleft是在队头多数据入队
3.弹出
pop是在尾部弹出,leftpop是在队头弹出
4.索引
deque也可以直接索引,从队头开始
其次是单调队列,在这里面的单调队列不需要将所有元素都放到队列里,加入的元素如果比当前的元素大,那直接将当前的小的元素扔掉(因为当前的小元素肯定会被先淘汰),然后取出元素的时候要看是不是取得当前最大元素,如果是的话,那就证明大元素应该被拿出去了,否则的话不需要进行任何pop操作。