//分三种情况讨论
//首先当前窗口中新添加的值s大于前一个窗口最大值m,则当前窗口最大值为k
//当前窗口新添加的至的值s小于最大的值m,且m在当前窗口中,则为m
//s小于m并且m被滑走了,则重新再找
public ArrayList<Integer> maxInWindows(int [] num, int size)
{
int len = num.length;
if(num==null||len<size||size<=0){
return null;
}
ArrayList<Integer> list = new ArrayList<Integer>();
int max = findMax(num,0,size-1);
list.add(num[max]);
for(int i = size;i<len;i++){
if(num[i]>num[max]){
max= i;
}else{
if(max==i-size)
max = findMax(num,i-size+1,i);
}
list.add(num[max]);
}
return list;
}
int findMax(int[] num, int start,int end){
int max = start;
for(int i = start+1;i<=end;i++){
if(num[i]>num[max])
max = i;
}
return max;
}
滑动窗口最大值
最新推荐文章于 2024-01-28 14:59:42 发布