题目描述
给你一个有序正数数组,然后给你数组代表从左往右依次N个点,每个点的意思就是在数轴上的位置,例如,arr[0]=1,arr[1]=3,就是代表数轴上1位置有一个数,3位置有一个数,现在,给你一个长度为L的绳子,请你求出,把这根绳子放在数轴上,最多可以覆盖几个点?
思路分析
此题,给你一个长度为L的绳子,其实就是相当于维护一个长度为L的滑动窗口,然后,窗口依次滑动,记录窗口中点的个数。因为滑动窗口是不回退的,因此,此题的算法时间复杂度为O(N)
代码
public static int getMaxNode(int[] arr,int L){
if(arr==null||L<1){
return 0;
}
int max=1;
//滑动窗口左边界
int leftNum=0;
//滑动窗口右边界
int rightNum=1;
int left;
int right;
while(rightNum!=arr.length){
left=arr[leftNum];
right=arr[rightNum];
if(right-left<=L){
//没有超过窗口,右边界右移一位
rightNum++;
}else {
if(max<rightNum-leftNum){
max=rightNum-leftNum;
}
//左边界右移一位
leftNum++;
}
}
if(max<rightNum-leftNum){
max=rightNum-leftNum;
}
return max;
}