数轴上从左到右有n个点a[0],a[1],…a[n-1],给定一根长度为L的绳子,求该绳子能覆盖几个点。
#include <iostream>
#include <cstring>
using namespace std;
int MaxCoverCount1(int* arr, int len, int L)
{
int maxCover = 1, nCurCount;
for ( int i = 0; i < len; i++ )
{
for ( int j = i+1; j < len; j++ )
{
if ( (arr[j]-arr[i]) <= L )
{
nCurCount = j-i+1;
maxCover = (maxCover>nCurCount)?maxCover:nCurCount;
}
}
}
return maxCover;
}
int MaxCoverCount2(int *a,int n, int L){
if(a==NULL) return 0;
int curr=0;
int currCover=1;
int maxCover=1;
int begin=0;
for(int i=1;i<n;i++){
if(curr>L){
while(curr+a[i]>=L && begin<i){
curr=curr-a[begin++];
currCover--;
}
curr+=a[i];
currCover++;
}
else {
curr+=a[i];
currCover++;
}
cout<<curr<<endl;
maxCover=max(maxCover,currCover);
}
return maxCover;
}
int main()
{
int a[] = {1,10,90,105,150,200,203,250,300};
int Len = 100;
cout << MaxCoverCount1(a,9,Len) <<endl;
cout << MaxCoverCount2(a,9,Len) <<endl;
return 0;
}