1. 程式人生 > 實用技巧 >劍指 Offer 59 - II. 佇列的最大值--滑動視窗的建模+Deque的基本使用(常用方法)

劍指 Offer 59 - II. 佇列的最大值--滑動視窗的建模+Deque的基本使用(常用方法)

劍指 Offer 59 - II. 佇列的最大值

題目連結

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;
    }
}