数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。

数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。

http://blog.csdn.net/sunnyyoona/article/details/43635773

#include <iostream>
using namespace std;

int maxCover(int* a, int n, int l)
{
    int maxCover = 1;
    int begin = 0;
    int end = 1;
    while(end < n)
    {
        if(a[end] - a[begin] > l)
        {
            maxCover = (end - begin) > maxCover?(end - begin):maxCover;
            begin++;
        }
        else
            end++;
    }
    return maxCover;
}

int main()
{
    int a[6] = {0,1,3,6,8,10};
    cout<<"最大的覆盖个数:"<<maxCover(a,6,8)<<endl;
    return 0;
}