刷题3:队列的最大值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题3:队列的最大值相关的知识,希望对你有一定的参考价值。

Leetcode:剑指 Offer 59 - II. 队列的最大值
双端队列queue为主队列,存放全部元素,help用于存放主队列的最大值。

1.入队:

queue:把元素value直接插入queue后即可。
help:把help后面的小于value用help.pollLast()删除,再把value用help.addLast()加入。

2.出队:

queue:用queue.pollFirst()把元素出队。
help:如果pollFirst()的元素等于help的左端头元素的值,用help.pollFirst()把元素出队。

class MaxQueue {
    LinkedList<Integer> queue;
    LinkedList<Integer> help;

    public MaxQueue() {
        queue = new LinkedList<Integer>();
        help = new LinkedList<Integer>();
    }
    
    public int max_value() {
       if(help.isEmpty()) return -1;
       return help.peekFirst();
    }
    
    public void push_back(int value) {
        queue.addLast(value);
        while(!help.isEmpty() && value > help.peekLast()){
            help.pollLast();
        }
        help.addLast(value);
    }
    
    public int pop_front() {
        if(queue.isEmpty()) return -1;
        int value = queue.pollFirst();
        if(value == help.peekFirst()){
            help.pollFirst();
        }
        return value;
    }
}

以上是关于刷题3:队列的最大值的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—215. 数组中的第K个最大元素(优先队列)—day15

刷题笔记

leetcode分类刷题

LeetCode刷题--点滴记录014

LeetCode刷题232-简单-用栈实现队列

LeetCode刷题232-简单-用栈实现队列