https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/
基本思路就是4,3,2,5這個隊里,如果5出現了,那么前面的數字的max就都是5了,所以維護一個雙端隊列把5出現后,前面的4個都清理掉
import java.util.Deque; import java.util.LinkedList; class MaxQueue { private Deque<Integer> queue = new LinkedList<>(); private Deque<Integer> maxQueue = new LinkedList<>(); public MaxQueue() { } public int max_value() { if(maxQueue.size() > 0) { return maxQueue.peekFirst(); } return -1; } public void push_back(int value) { queue.addLast(value); while (maxQueue.size() > 0 && maxQueue.peekLast() < value) {//刪掉隊尾比他小的,比如4,3,2,1的maxQueue也是4,3,2,1,如果這個時候插入一個53,那么2,1就沒用了 maxQueue.pollLast(); } maxQueue.addLast(value); } public int pop_front() { if(queue.size() > 0) { int value = queue.poll(); if (maxQueue.peekFirst() == value) { maxQueue.poll(); } return value; } return -1; } } /** * 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(); */