package com.heu.wsq.leetcode.arr;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
/**
* 剑指 Offer 59 - II. 队列的最大值
* @author wsq
* @date 2021/1/24
* 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
* 若队列为空,pop_front 和 max_value 需要返回 -1
*
* 示例 1:
* 输入:
* ["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
* [[],[1],[2],[],[],[]]
* 输出: [null,null,null,2,1,2]
*
* 链接:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/e2t5ug/
*/
public class MaxQueue {
Queue<Integer> queue;
Deque<Integer> deque;
public MaxQueue() {
queue = new LinkedList<>();
deque = new LinkedList<>();
}
public int max_value() {
if(deque.isEmpty()){
return -1;
}
return deque.peekFirst();
}
public void push_back(int value) {
queue.offer(value);
while(!deque.isEmpty() && deque.peekLast() < value){
deque.removeLast();
}
deque.addLast(value);
}
public int pop_front() {
if(queue.isEmpty()){
return -1;
}
int tmp = queue.poll();
if(deque.peekFirst() == tmp){
deque.removeFirst();
}
return tmp;
}
}
剑指 Offer 59 - II. 队列的最大值
最新推荐文章于 2022-11-28 17:16:55 发布