LeetCode 题库 全 JAVA 解题
面试题59 - II. 队列的最大值
原题回顾:
请定义一个队列并实现函数 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
思路
关键在于如何获取队列最大值
这里利用双队列解决
一条队列输入输出
一条队列辅助,保存当前队列最大值
最大值保存条件为保存当前元素之前不小于该元素的所有值
比如:
队列输入为 1 1 1 2 3 1(依次输入)
辅助队列变化为:
1
11
111
2
3
31
代码(评论区大佬)
class MaxQueue {
private Deque<Integer> queue;
private Deque