1、题目
2、思路
这是一个属于较难的题,来吧,挑战一下!
3、代码
import java.util.*;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size) {
ArrayList<Integer> list=new ArrayList<Integer> ();
if(num==null||num.length<size||size<=0) return list;
//int max=num[0];
int index=0;
index=findMax(num,size,0);
list.add(num[index]);
for(int i=size;i<num.length;i++){
if(index<=i-size){
index=findMax(num,size,index+1);
}//判断最大值是否过期因为size大小为一个窗口,一次的最大值只能为两个窗口内作比较,过期则找到最新的最大值
if(num[index]<num[i]){
index=i;
}
list.add(num[index]);
}
return list;
}
// 在指定区间内,找到最大值对应的索引
public int findMax(int [] num,int size,int begin){
//int max=num[begin];
int index=begin;
for(int i= begin+1;i< begin+size;i++){
if(num[index]<num[i])
{
// max=num[i];
index=i;
}
}
return index;
}
}