import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if (size == 0 || num.length == 0 || size > num.length) {
            return list;
        }
        int left = 0, right = 0;
        PriorityQueue<Integer> queue = new PriorityQueue<Integer>
        (new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        for (; right < size; right++) {
            queue.add(num[right]);
        }
        list.add(queue.peek());
        while (right < num.length) {
            queue.remove(num[left]);
            queue.add(num[right]);
            list.add(queue.peek());
            left++;
            right++;
        }
        return list;
    }
}