public static ArrayList<integer> maxInWindows(int [] num, int size) {
ArrayList<integer> queue = new ArrayList<>();
if (num.length>=size&&size>=1){
List<integer> maxQueue = new LinkedList<>();
for (int i = 0; i < size; i++) {
while (!maxQueue.isEmpty()&&num[i]>=num[maxQueue.get(maxQueue.size()-1)]){
maxQueue.remove(maxQueue.size()-1);
}
maxQueue.add(i);
}
for (int i = size; i <num.length ; i++) {
queue.add(num[maxQueue.get(0)]);
while (!maxQueue.isEmpty()&&num[i]>=num[maxQueue.get(maxQueue.size()-1)]){
maxQueue.remove(maxQueue.size()-1);
}
if (!maxQueue.isEmpty()&&(i-size>=maxQueue.get(0))){
maxQueue.remove(0);
}
maxQueue.add(i);
}
queue.add(num[maxQueue.get(0)]);
}
return queue;</integer></integer></integer>

}