如何寻找最多的覆盖点

如何寻找最多的覆盖点

题目描述:

坐标轴上从左到右依次的点为 a[0]、 a[1]、 a[2]…a[n-1], 设一根木棒的长度为 L,求 L 最多能覆盖坐标轴的儿个点?

分析与解答:

本题求满足 a[j]-a[i] <= L && a[j+ l ]-a[i] > L 这两个条件的 J 与 1 中间的所有点个数中的 最 大值,即 j-i+1 最大,这样题目就简单多了,方法也很简单: 直接从左到右扫描,使用两个索 引i和j,i从位置0开始, j从位置1开始,如果a[j]-a[i]<=L,则j+前进,并记录中间经过 的点的个数,如果 a[j] - a[i] > L,则 j-回退,覆盖点个数一1,回到刚好满足条件的时候 , 将满 足条件的最大值与前面找出的最大值比较,记录下当前的最大值,然后执行 i+、 j+,直到求 出最大的点个数。
有两点需要注意,如下所示:
(l)这里可能不存在i和j使得a[j]- a[i]刚好等于L的情况发生,所以,判断条件不能为 a[j] - a[i]= L。
(2)可能存在不同的覆盖点但覆盖的长度相同的情况发生,此 时只选取第一次覆盖的点。 实现代码如下:

def maxcover(a,l):
    count=2
    maxcount=1
    start=0
    n=len(a)
    i=0
    j=1
    while imaxcount:
            start=i
            maxcount=count
        i+=1
        j+=1
    print('覆盖的坐标点')
    i=start
    while i

输出:
覆盖的坐标点
7
8
10
11
12
13
15

7

你可能感兴趣的:(leetcode,python,算法,数据结构,leetcode)