用双向队列deque实现一个单调队列
# -*- coding:utf-8 -*-
from collections import deque
class MonotonicQueue():
def __init__(self):
self.q = deque()
def push(self, n):
while self.q and self.q[-1] < n:
self.q.pop()
self.q.append(n)
def popleft(self, n):
if self.q[0] == n:
self.q.popleft()
def peek(self):
if self.q:
return self.q[0]
else:
return None
class Solution:
def maxInWindows(self, num, size):
# write code here
nums = num
k = size
if k == 0 or k > len(nums):
return []
mq = MonotonicQueue()
for i in range(k):
mq.push(nums[i])
res = [mq.peek()]
for i in range(k, len(nums)):
mq.popleft(nums[i-k])
mq.push(nums[i])
res.append(mq.peek())
return res



京公网安备 11010502036488号