先贴上代码,确保真的可以通过后再来详细讲解
#double end queue
from collections import deque
class MaxQueue(object):
from collections import deque
def __init__(self):
self.deque_ = deque([])
self.min_ = deque([])
def max_value(self):
"""
:rtype: int
"""
if not self.min_:
return -1
else:
return self.min_[0]
def push_back(self, value):
"""
:type value: int
:rtype: None
"""
self.deque_.extendleft([value])
#比之前最大值后进但是比其小的,偏爱队列后面,但是一出现了比之前大的数,整个辅助数列就会剩下整个数
while self.min_ and self.min_[-1] < value:
self.min_.pop()
self.min_.append(value)
def pop_front(self):
"""
:rtype: int
"""
if not self.deque_:
return -1
elif self.min_[0] == self.deque_[-1]:
self.min_.popleft()
return self.deque_.pop()
else:
return self.deque_.pop()
# Your MaxQueue object will be instantiated and called as such:
# obj = MaxQueue()
# param_1 = obj.max_value()
# obj.push_back(value)
# param_3 = obj.pop_front()
其中用到的双向队列是collection中的一个类,好处是拥有类似list的作用但是,时间复杂度的O(1)