数轴点覆盖

来源:互联网 发布:php个人博客源码 简约 编辑:程序博客网 时间:2024/04/28 21:23

数轴上从左到右有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;}


0 0