用双向队列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