三指针求解
初始定义窗口左边界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;
}
}


京公网安备 11010502036488号