该题考察滑动一数组框时,最大值的变化,我们可以使用双指针来进行滑动
灵感来自于LeetCode长度最小的子数组中的利用双指针将时间复杂度降为O(n),详情看代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size)
{
ArrayList<Integer> arr=new ArrayList<>();
//如果数组为零或者数组小于size,或者size为零,都是输出空链表
if(num.length==0||size==0){
return new ArrayList<Integer>();
}
if(num.length<size){
return new ArrayList<Integer>();
}
//使用双指针进行计算,首先从第一个滑动模块开始,
//设定标志位 stand,进行首次判断
int begin=0;
int end=size-1;
int max=Integer.MIN_VALUE;
int stand=0;
for(int i=0;i<=size-1;i++){
if(max<num[i]){
max=num[i];
stand=i;
}
}
arr.add(num[stand]);
begin++;
end++;
//跳出循环条件 end<num.length
while(end<num.length){
if(num[end]>max){
max=num[end];
stand=end;
}
//判断stand是否还在区间内,如果不在,则重新进行判断
if(begin>stand){
max=Integer.MIN_VALUE;
for(int i=begin;i<=end;i++){
if(max<num[i]){
max=num[i];
stand=i;
}
}
}
arr.add(num[stand]);
begin++;
end++;
}
//输出链表
return arr;
}
}
来源:CSDN
作者:qq_43641886
链接:https://blog.csdn.net/qq_43641886/article/details/104185984