绳子可以覆盖的最多点数

有网友指出,我的算法其实没必要申请多余的数组,那么有没有更加高效的算法呢,我身边的一个大神给了我一个O(N)复杂度的算法:

  他的原话:两个指针,一个front,一个rear,每次front-rear,比L小,看覆盖的点数。保存覆盖点数的最大值,然后front++;比L大,rear++,每个数最多遍历2遍,复杂度O(N)。

  对于这个算法,他给了一个形象的比喻:

  就好像一条长度为L的蛇。头伸不过去的话,就把尾巴缩过来最多只需要走一次,就知道能覆盖几个点

int line(int a[],int n,int len)
{
    int front,rear,maxnum;
    front = rear = maxnum = 0;

    while(front < n)
    {
        if(a[front] - a[rear] <= len)
        {
            maxnum = fmax(maxnum,front-rear);
            front++;
        }
        else
            rear++;
    }
    return maxnum+1;
}

阅读更多
个人分类: 数据结构与算法
想对作者说点什么? 我来说一句

数轴上绳子覆盖点数

2013年09月29日 13KB 下载

没有更多推荐了,返回首页

不良信息举报

绳子可以覆盖的最多点数

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭