剑指 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 @ 2020-12-03 20:06  Garrett_Wale  阅读(72)  评论(0编辑  收藏  举报