【剑指Offer】59 - II. 队列的最大值
发布日期:2021-06-29 19:47:17 浏览次数:2 分类:技术文章

本文共 1360 字,大约阅读时间需要 4 分钟。

题目:请定义一个队列并实现函数 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

答案:

class MaxQueue {
//一个正常队列,一个优先队列 private Queue
queue; private Queue
minHeap; public MaxQueue() {
queue = new LinkedList<>(); minHeap = new PriorityQueue<>(new Comparator
() {
@Override public int compare(Integer o1, Integer o2) {
return o2 - o1; } }); } public int max_value() {
if(minHeap.isEmpty()) return -1; return minHeap.peek(); } public void push_back(int value) {
queue.add(value); minHeap.add(value); } public int pop_front() {
if(queue.isEmpty()) return -1; minHeap.remove(queue.peek()); int num = queue.poll(); return num; }}/** * 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(); */

转载地址:https://darkness.blog.csdn.net/article/details/115656673 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指OFFER】59 - I. 滑动窗口的最大值
下一篇:【力扣】530. 二叉搜索树的最小绝对差

发表评论

最新留言

很好
[***.229.124.182]2024年04月22日 20时51分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章