public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size) {
if(size==0||size>num.length||num==null) return null;
ArrayList<Integer> res=new ArrayList<>();
//LinkedList继承了Deque接口,可当做Deque使用
LinkedList<Integer> queue=new LinkedList<>();
for(int i=0;i<num.length;i++){
//把这个数之前比它小的剔除出去,比它大的留下,到时候大的会先被放出去
while(!queue.isEmpty()&&num[queue.peekLast()]<num[i]){
queue.removeLast();
}
queue.offerLast(i);
//获取左边界的index
int l=i-size+1;
//判断当前最大值是否在滑动窗口外,如果是,移除
if(l>queue.peekFirst()) queue.removeFirst();
//l是否大于等于0,即左边界是否是第一个数开始
if(i+1>=size) res.add(num[queue.peekFirst()]);
}
return res;
}
}