請定義乙個佇列並實現函式 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]
示例 2:
輸入:
["maxqueue","pop_front","max_value"]
[,,]
輸出: [null,-1,-1]
限制:1 <= push_back,pop_front,max_value的總算子 <= 10000
1 <= value <= 10^5
思路:巧妙設定乙個輔助的雙端佇列,來記錄當前佇列中的最大值,從而保證獲取最大值操作的時間複雜度達到o(1)。對於序列1,2,3,4,4,5而言,最大的值為5,前面的5個數沒有被取出之前,序列中最大的數一直是5,因此雙端序列的插入規則就是從末端比較,如果插入的數值比尾端的數值大,採取polllast()操作刪除尾端元素,直到乙個數值比插入的數值大的時候終止刪除操作,然後將當前元素插入到尾端。
class maxqueue
public int max_value()
int ans = deq.peekfirst() ;
return ans ;
}public void push_back(int value)
deq.offerlast(value) ;
return ;
}public int pop_front()
int ans = que.poll() ;
if(ans == deq.peekfirst())
return ans ;
}}/**
* 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();
*/
劍指 Offer 59 II 佇列的最大值
題目描述 請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例1 輸入 maxqueue push back p...
劍指Offer 59 II 佇列的最大值
請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 額外維護乙個雙端佇列,用來儲存當前佇列可能的最大值,且是有序的,...
劍指 Offer 59 II 佇列的最大值
請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back push ...