解题思路
维护一个单调降序的双端队列
代码
import java.util.ArrayList;
import java.util.LinkedList;
public class JZ64 {
public ArrayList<Integer> maxInWindows(int [] num, int size) {
int right = size,left=0,length = num.length;
int n = length-size+1;
LinkedList<Integer> list = new LinkedList<>();
ArrayList<Integer> ans = new ArrayList<>();
if (size==0 || size>length) return ans;
list.offer(num[0]);
for (int i=1;i<size;i++){
while (!list.isEmpty() && list.getLast()<num[i]){
list.removeLast();
}
list.offerLast(num[i]);
}
while (right<length){
ans.add(list.getFirst());
if (num[left]==list.getFirst()){
list.removeFirst();
}
while (!list.isEmpty() && num[right]>list.getLast()){
list.removeLast();
}
list.offerLast(num[right]);
left++;
right++;
}
ans.add(list.getFirst());
return ans;
}
}