原题链接
相关题目,相关数据结构及其设计:设计一个能够获得最小值的栈
能够获取最大值的队列
class MaxQueue {
private Deque<Integer> dataQueue;
private Deque<Integer> maxQueue;
public MaxQueue() {
dataQueue = new LinkedList<>();
maxQueue = new LinkedList<>();
}
public int max_value() {
if(maxQueue.isEmpty())
return -1;
return maxQueue.peekFirst();
}
/**
* 当队列中新加入一个数据 value 时,该数据也要加到maxQueue末尾,
* 但是,在加到maxQueue之前,maxQueue末尾(包括末尾数据)之前所有比
* value小的数据都应该被删去,因为这些数据已经对当前队列dataQueue,以及当前队列的
* 子队列的最大值都没有影响了
* @param value
*/
public void push_back(int value) {
dataQueue.addLast(value);
while (!maxQueue.isEmpty() && maxQueue.peekLast() < value)
maxQueue.removeLast();
maxQueue.addLast(value);
}
public int pop_front() {
if(dataQueue.isEmpty())
return -1;
Integer rmVal = dataQueue.removeFirst();
if(!maxQueue.isEmpty() && rmVal.equals(maxQueue.peekFirst()))
maxQueue.removeFirst();
return rmVal;
}
}
/**
* Your MaxQueue object will be instantiated and called as such:
* MaxQueue obj = new MaxQueue();
* int param_1 = obj.max_value();
* obj.push_back(value);
* int param_3 = obj.pop_front();
*/