剑指 Offer 59 - II. 队列的最大值--滑动窗口的建模+Deque的基本使用(常用方法)

剑指 Offer 59 - II. 队列的最大值

题目链接

相似题目

剑指 Offer 30. 包含min函数的栈
面试题59 - II. 队列的最大值
155. 最小栈

java实现

package com.walegarrett;

/**
 * @Author WaleGarrett
 * @Date 2020/12/3 19:19
 */

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;

/**
 * 队列中的最大值:剑指 Offer 59 - II. 队列的最大值
 * https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/
 */
public class SlidingWindow_MaxValueInQueue {
    private Deque<Integer> que;
    //help该双端队列始终维护que中的最大元素到目前为止输入元素之间的元素
    private Deque<Integer> help;
    public SlidingWindow_MaxValueInQueue() {
        que=new ArrayDeque<>();
        help = new ArrayDeque<>();
    }

    public int max_value() {
        return que.isEmpty()?-1:help.peek();
    }

    public void push_back(int value) {
        que.offer(value);
        //这里使用while,保持help双端队列中始终存放大于等于当前元素的元素
        while(!help.isEmpty()&&value>help.peekLast()){
            help.pollLast();
        }
        help.offer(value);
    }

    public int pop_front() {
        if(que.isEmpty())
            return -1;
        int value = que.pop();
        if(value==help.peek()){
            help.pop();
        }
        return value;
    }
}

posted @   Garrett_Wale  阅读(73)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示