您的位置:首页 > 其它

绳子可以覆盖的最多点数

2013-12-04 20:43 302 查看
有网友指出,我的算法其实没必要申请多余的数组,那么有没有更加高效的算法呢,我身边的一个大神给了我一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐