假设输入格式为
num #线段数
... #线段(begin, end)
...
...
if __name__ == "__main__":
line_position = []
num = int(input())
for i in range(num): #get couple line position
str_lst = input().split()
line_position.append([float(str_lst[0]), float(str_lst[1])])
i = num - 1
position_pair = []
position_pair.append(line_position[-1])
while True:
i -= 1
if position_pair[-1][0] < line_position[i][1]:
if position_pair[-1][0] > line_position[i][0]:
position_pair[-1][0] = line_position[i][0]
else:
position_pair.append(line_position[i])
if i == 0:
break
sum_all = 0
for i in range(len(position_pair)):
sum_all += position_pair[i][1] - position_pair[i][0]
print(position_pair)
print(sum_all)
设置一个指针,首先指向倒数第二个位置
思想:从后往前依次移动,每当前一个线段包含该线段的起始点或者该线段包含前一线段,则合并前一线段,重复执行。