题目描述
请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。
若队列为空,pop_front 和 max_value 需要返回 -1
输入输出
1 | 输入: |
基本思路
初始化队列 queue ,双向队列 deque ;
最大值 max_value() :
当双向队列 deque 为空,则返回 -1;
否则,返回 deque 首元素;
入队 push_back() :
- 将元素 value 入队 queue ;
- 将双向队列中队尾 所有 小于 value 的元素弹出(以保持 deque 非单调递减),并将元素 value 入队 deque ;
出队 pop_front() :
- 若队列 queue 为空,则直接返回 -1 ;
- 否则,将 queue 首元素出队;
- 若 deque 首元素和 queue 首元素 相等 ,则将 deque 首元素出队(以保持两队列 元素一致 ) ;
java实现
1 | class MaxQueue { |