import java.awt.print.Printable; import java.beans.VetoableChangeListenerProxy; import java.lang.reflect.Array; import java.text.DateFormatSymbols; import java.text.spi.NumberFormatProvider; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeSet; import javax.naming.ldap.SortControl; import javax.print.attribute.standard.NumberUpSupported; import javax.print.attribute.standard.RequestingUserName; import org.omg.PortableInterceptor.INACTIVE; public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> maxWindows=new ArrayList<>(); Deque<Integer> index=new ArrayDeque<>(); if(num.length>=size&&size>=1) { for(int i=0;i<size;i++) { if(!index.isEmpty()&&num[i]>=num[index.getLast()]) index.removeLast(); index.addLast(i); } maxWindows.add(num[index.getFirst()]); for(int i=size;i<num.length;i++) { while(!index.isEmpty()&&num[index.getLast()]<=num[i]) { int ix=index.getLast(); index.removeLast(); } if(!index.isEmpty()&&index.peek()<=i-size) index.removeFirst(); index.addLast(i); maxWindows.add(num[index.peek()]); } } return maxWindows; } }