剑指offer 面试题65 滑动窗口的最大值

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

  

posted @ 2016-11-23 16:09  simple_wxl  阅读(304)  评论(0编辑  收藏  举报