import java.util.*; public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> ret = new ArrayList<>(); if(num.length * size == 0 || num.length<size) return ret; Deque<Integer> queue = new LinkedList<>(); for(int i = 0; i < size; i++) { while(!queue.isEmpty() && queue.peekLast() <= num[i]) { queue.pollLast(); } queue.addLast(num[i]); } ret.add(queue.peekFirst()); for(int i = size; i < num.length; i++) { if(num[i-size] == queue.peekFirst()) { queue.pollFirst(); } while(!queue.isEmpty() && queue.peekLast() <= num[i]) { queue.pollLast(); } queue.addLast(num[i]); ret.add(queue.peekFirst()); } return ret; } }