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; } }