华为OD机试题 路灯照明(合并区间)

一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间的距离是100m。每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,未照明区间的长度和。
输入描述:
第一行为一个数N,表示灯的个数,[1, 100000]
第二行为N个空格分隔的数,表示路灯的照明半径,[1, 100*100000]
输出描述:
第一个路灯和最后一个路灯之间,未照明区间的长度和
举例:
输入:
8
10 10 10 10 10 10 10 10
输出:
560
输入:
8
10 10 10 250 10 10 10 10
输出:
160
def solution(alist):

    def myfunc(x):
        return x[0],x[1]
    blist = sorted(alist,key=myfunc)
    print(blist)
    res = []
    tmp = blist[0]
    for i in range(1,len(blist)):
        if blist[i][0] > tmp[1]:
            res.append(tmp)
            tmp = blist[i]
        else:
            tmp = [tmp[0],blist[i][1]]

    res.append(tmp)
    print(res)

if __name__ =="__main__":
    #input_list = [10,10,10,10,10,10,10,10]
    input_list = [10,10,10,250,10,10,10,10]
    alist = []
    for i in range(len(input_list)):
        if i ==0:
            alist.append([0,input_list[i]])
        elif i == len(input_list)-1:
            alist.append([100*i-input_list[i],100*i+input_list[i]])
        else:alist.append([100*i-input_list[i],100*i])
    solution(alist)

 




posted @ 2022-07-20 00:42  莫大师兄  阅读(421)  评论(0)    收藏  举报