1.坐标轴上从左到右依次的点为a[0],a[1],a[2]到a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?
2.本题要求满足a[j]-a[i]<=l并且a[j+1]-a[I]>L,这两个条件的j与i中间的所有点数中最大值,即j-i+1最大,可以直接从左到右扫描,使用两个索引i,和j,i从0开始,j从位置1开始,如果a[j]-a[i]<=L,则j+前进,并记录中间经过的点的个数,如果a[j]-a[i]>l,则j-回退,覆盖点个数-1,回到刚好满足条件的时候,将满足条件的最大值与前面找出的最大值比较,记录下当前的最大值,然后执行i+,j+,直到求出最大的个数
3.代码如下:
def maxCover(arr,L):
count = 2
maxcount = 1
start = 0
n = len(arr)
i = 0
j = 1
while i < n and j < n:
while j < n and arr[j] - arr[i] <= L:
j += 1
count += 1
j -= 1
count -= 1
if count > maxcount:
start = i
maxcount = count
i += 1
j += 1
i = start
while i < start + maxcount:
print(arr[i],end= ' ')
i += 1
print()
return maxcount
if __name__ == '__main__':
arr = [1,3,7,8,10,11,12,13,15,16,17,19,20]
print(maxCover(arr,8))
结果:
7 8 10 11 12 13 15
7