题目描述
代码实现
窗口大小可变的滑动窗口问题 (窗口的大小无限接近于绳子的长度,但不超过)
#include<iostream>
using namespace std;
int main() {
int a[5]= {1,4,7,9,10}; //给定一个有序数组,代表散落在x轴上的点
int k=4; //给定绳子长度
//求绳子最多能覆盖过来几个点?
int l=0,r=0; //定义窗口的左右边界
int maxn=0; //保存覆盖点数的最大值
while(l<5) { //左边界可以一直试到最后一个位置
while(a[r]-a[l]<=k && r<5) {
r++;
}
//r来到了合适的右边界的右边位置上,即停留在右窗口+1的位置
if(r-l>maxn) { //所以这里直接是r-l
maxn=r-l;
}
l++; //r不需要回退到l的位置上,它变小是没意义的
}
cout<<"绳子覆盖最多的点数:"<<maxn;
return 0;
}