劍指 Offer 59 - II. 佇列的最大值--滑動視窗的建模+Deque的基本使用(常用方法)
阿新 • • 發佈:2020-12-03
劍指 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; } }