2022-7-12 剑指offer-队列-单调栈
作者:互联网
剑指 Offer 59 - II. 队列的最大值
难度中等请定义一个队列并实现函数 max_value
得到队列里的最大值,要求函数max_value
、push_back
和 pop_front
的均摊时间复杂度都是O(1)。
若队列为空,pop_front
和 max_value
需要返回 -1
1 class MaxQueue { 2 PriorityQueue<Integer> max; 3 LinkedList<Integer> queue; 4 public MaxQueue() { 5 queue=new LinkedList<>(); 6 max=new PriorityQueue<>((a,b)->(b-a)); 7 } 8 9 public int max_value() { 10 if (max.isEmpty()) return -1; 11 return max.peek(); 12 } 13 14 public void push_back(int value) { 15 queue.offer(value); 16 max.offer(value); 17 } 18 19 public int pop_front() { 20 if (queue.isEmpty()) return -1; 21 int x=queue.poll(); 22 max.remove(x); 23 return x; 24 } 25 } 26 27 /** 28 * Your MaxQueue object will be instantiated and called as such: 29 * MaxQueue obj = new MaxQueue(); 30 * int param_1 = obj.max_value(); 31 * obj.push_back(value); 32 * int param_3 = obj.pop_front(); 33 */
最优解:用一个单调栈维护最大值,需要注意的是单调栈是递减的单调栈,需要把所有比当前数字小的全部出栈。
标签:12,return,offer,int,max,value,queue,2022,MaxQueue 来源: https://www.cnblogs.com/benbicao/p/16471550.html