剑指 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;
}
}
Either Excellent or Rusty