题目描述:
题解:
参考:力扣
思路:维护两个队列,一个队列queue记录正常的出队入队操作,另一个maxqueue记录最大值。
1.pushback时,将value加入queue,如果maxqueue[-1]小于value,则将maxqueue中所有小于value的数字出队,然后再将value加入maxqueue,否则直接入队。
2.maxvalue总在maxqueue[0],如果popleft时queue[0]=maxvalue[0],则将maxvalue[0]出队。
class MaxQueue: def __init__(self): self.queue = collections.deque() self.maxqueue = collections.deque() def max_value(self) -> int: if len(self.queue) == 0: return -1 return self.maxqueue[0] def push_back(self, value: int) -> None: while self.maxqueue and self.maxqueue[-1] < value: self.maxqueue.pop() self.queue.append(value) self.maxqueue.append(value) def pop_front(self) -> int: if len(self.queue) == 0: return -1 num = self.queue.popleft() if num == self.maxqueue[0]: self.maxqueue.popleft() return num # 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()