package leetcode;
import java.util.LinkedList;
public class demo_239 {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums==null||nums.length<2) {return nums;}
int[] result=new int[nums.length-k+1];
//设计一个双端队列
LinkedList<Integer> queue=new LinkedList<Integer>();
for(int i=0;i<nums.length;i++) {
//从队列往后依次加入元素,如果队列末尾元素小于当前元素直接弹出
while(!queue.isEmpty()&&nums[queue.peekLast()]<=nums[i]) {
queue.pollLast();
}
//队列中只加入当前元素的下标
queue.addLast(i);
//滑动串口的左边界已经查处K的范围,则弹出
if(queue.peek()==i-k) {
queue.pollFirst();
}
//队列中的头元素对应的值就是当前滑动窗口中的最大值
if(i+1>=k) {
result[i-k+1]=nums[queue.peek()];
}
}
for (int i : result) {
System.out.println(i);
}
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_239 demo=new demo_239();
int[] result= {7,2,4};
demo.maxSlidingWindow(result, 2);
}
}