剑指 Offer 59 - II. 队列的最大值
题目:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
若队列为空,pop_front 和 max_value 需要返回 -1
方法:递减双端队列 时间复杂度O(1) 空间复杂度O(n)
使用一个双端递减队列,储存最大值,当当前值大于队列末尾时,将队列末尾pop,直到不大于队列末尾,进队列
class MaxQueue(object): def __init__(self): self.queue = [] self.deque = [] def max_value(self): """ :rtype: int """ return self.deque[0] if self.deque else -1 def push_back(self, value): """ :type value: int :rtype: None """ self.queue.append(value) while self.deque and self.deque[-1] < value: self.deque.pop() self.deque.append(value) def pop_front(self): """ :rtype: int """ if self.queue == []: return -1 val = self.queue.pop(0) if val == self.deque[0]: self.deque.pop(0) return val

浙公网安备 33010602011771号