绳子可以覆盖的最多点数

原创 2013年12月04日 20:43:47

有网友指出,我的算法其实没必要申请多余的数组,那么有没有更加高效的算法呢,我身边的一个大神给了我一个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;
}

[经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。

题目数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。...
  • SunnyYoona
  • SunnyYoona
  • 2015年02月08日 11:21
  • 2326

hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树

http://acm.hdu.edu.cn/showproblem.php?pid=5091 给你10000以内的敌舰的坐标(即分别为x,y),要求用W*H的矩形去围住一个区域,使得这个区域内的敌舰...
  • u012774187
  • u012774187
  • 2014年11月02日 18:22
  • 1373

【HDU5928 2016CCPC东北地区大学生程序设计竞赛 - 重现赛 G】【计算几何 凸包思想 枚举底点做DP】Birthday Gift 给定绳长最多围住多少个点

Birthday Gift Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To...
  • snowy_smile
  • snowy_smile
  • 2016年10月08日 16:41
  • 1043

poj1106Transmitters【求旋转半圆能覆盖的最多点数】

Language: Default Transmitters Time Limit: 1000MS   Memory Limit: 10000K Total S...
  • R1986799047
  • R1986799047
  • 2015年09月18日 23:34
  • 276

每日一题(96) - 线段最多覆盖的点数

题目来自百度14年校招天津站笔试题,当时各种原因导致被虐。 题目:数轴上从左到右有n个点a[0],a[1],…a[n-1],给定一根长度为L的绳子,求该绳子能覆盖几个点。 举例:数组为{2,6,6,6...
  • insistGoGo
  • insistGoGo
  • 2013年10月01日 15:09
  • 1548

POJ1981Circle and Points【单位圆能覆盖的最多点】

Language: Default Circle and Points Time Limit: 5000MS   Memory Limit: 30000K Total Submissio...
  • R1986799047
  • R1986799047
  • 2015年09月18日 22:11
  • 968

2817:木棒 【递归+剪枝】

乔治拿来一组等长的木棒,将它们随机地裁断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计...
  • Uni_AC
  • Uni_AC
  • 2015年11月07日 22:38
  • 265

hdu 1077 圆覆盖的最大点数

题目大意:给你一个半径为1的圆,再给你n个点, 求这个圆最多覆盖n个点中的几个。   思路:枚举两个在圆上的点确定一个圆的圆心, 然后枚举出一共有多少点能被这个圆覆盖,求出其中最多的数目。 ...
  • wwwlps
  • wwwlps
  • 2017年10月30日 20:36
  • 17

Unreal Engine 4 —— 可交互绳索的构建

UE4的这个Cable Component是与世界场景没有交互的,因此这篇博客将讲解如何基于该Cable Component来实现绳索与世界的交互。...
  • noahzuo
  • noahzuo
  • 2016年05月01日 17:20
  • 2400

寻找平面内共线点数最多的直线和点数

import java.awt.Point; import java.util.HashSet; import java.util.Set; import java.util.Scanner; pu...
  • qq_32250495
  • qq_32250495
  • 2017年07月18日 12:05
  • 102
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:绳子可以覆盖的最多点数
举报原因:
原因补充:

(最多只允许输入30个字)