三指针求解
初始定义窗口左边界left=0,右边界right=left+size,以及指向窗口最大值位置的指针index
窗口更新后index跟left的大小关系:
如果最大值索引index<left,说明之前的最大值不在窗口内,重新寻找最大值
否则最大值索引index>=left,说明窗口移动后最大值还在窗口里边,比较最大值跟新进窗口的值
更新当前窗口最大值,重新定位最大值索引,窗口后移
import java.util.*; public class Solution { public ArrayList<Integer> maxInWindows(int [] num, int size) { ArrayList<Integer> list=new ArrayList(); if(size>num.length||size==0){ return list; } int index=-1; int max=-1; int left=0; int right=size-1; while(right<num.length){ if(index<left){ max=num[left]; for(int i=left;i<=right;i++){ if(max<num[i]){ max=num[i]; index=i; } } } else{ if(max<num[right]){ max=num[right]; } } list.add(max); left++; right++; } return list; } }