刷题笔记

Posted HardyDragon_CC

tags:

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

59 II.队列的最大值

在这里插入图片描述

class MaxQueue {
    // 辅助队列
    Queue<Integer> q;
    // 单调递减的 双端队列,最大值就是第一项
    Deque<Integer> d;

    public MaxQueue() {
        q = new LinkedList<Integer>();
        d = new LinkedList<Integer>();
    }
    
    public int max_value() {
        if(d.isEmpty()){
            return -1;
        }
        return d.peekFirst();
    }
    
    public void push_back(int value) {
        // 如果在入队之前队列不为空,那么就从队尾开始,将比 value 小的值都退队,保证队列单调递减        
        while(!d.isEmpty() && d.peekLast() < value){
            d.pollLast();
        }
        // 队尾插入
        d.offerLast(value);
        // 辅助队列记录正常按顺序插入的结果
        q.offer(value);
    }
    
    public int pop_front() {
        if(q.isEmpty()){
            return -1;
        }
        // ans 是 当前正常队列中 队头元素
        int ans = q.poll();
        // 如果 单调递减的队头元素刚好就是 正常队列的队头元素,那么同样出队
        if(ans == d.peekFirst()){
            d.pollFirst();
        }
        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();
 */

思路:维护一个单调递减的双端队列,最大值就是队头元素;再维护一个正常顺序入队的队列,出队是判断是否双端队列的队头也要出队。

以上是关于刷题笔记的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day5

LeetCode刷题笔记-数据结构-day12

LeetCode刷题笔记-数据结构-day12

LeetCode刷题笔记-动态规划-day7

LeetCode刷题笔记-动态规划-day7

LeetCode刷题笔记-动态规划-day7