队列的最大值
Less than 1 minute
队列的最大值
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
若队列为空,pop_front 和 max_value 需要返回 -1
输入:
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出: [null,null,null,2,1,2
class MaxQueue(object):
'''力扣要求只能导入deque的题解
可使用queue优化self.que
'''
def __init__(self):
self.que = deque() # 记录队列值
self.deque = 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.que.append(value)
while self.deque and self.deque[-1] < value:
self.deque.pop()
self.deque.append(value)
def pop_front(self):
"""
:rtype: int
"""
if not self.que: return -1
val = self.que.popleft()
if val == self.deque[0]:
self.deque.popleft()
return val
# Your MaxQueue object will be instantiated and called as such:
obj = MaxQueue()
print(obj.max_value())
print(obj.pop_front())
print(obj.pop_front())
obj.push_back(94)
obj.push_back(16)
obj.push_back(89)
print(obj.pop_front())
obj.push_back(22)
print(obj.pop_front())