前言
《华为OD笔试真题 python》 本专栏包含华为OD机试真题,会实时更新收纳网友反馈,为大家更新最新的华为德科OD机试试题,为大家提供学习和练手的题库,订阅本专栏后可私信进交流群哦
■ 题目描述
【区间交叠问题】
给定坐标轴上的一组线段,线段的起点和终点均为整数并且长度不小于1,请你从中找到最少数量的线段,这些线段可以覆盖住所有线段。
输入描述
第一行输入为所有线段的数量,不超过10000,后面每行表示一条线段,格式为”x,y”,
x和y 分别表示起点和终点,取值范围是[-10^5,10^5]。
输出描述
最少线段数量,为正整数。
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3
1,4
2,5
3,6
输出
2
Python代码实现:
# 输入获取
n = int(input())
rans = [list(map(int, input().split(","))) for i in range(n)]
def main(rans, n):
rans.sort(key=lambda x: x[0])
stack = [rans[0]]
for i in range(1, n):
ran = rans[i]
while True:
if len(stack) == 0:
stack.append(ran)
break
s0, e0 = stack[-1]
s1, e1 = ran
if s1 <= s0:
if e1 <= s0:
break
elif e1 < e0:
break
else:
stack.pop()
elif s1 < e0:
if e1 <= e0:
break
else:
stack.append([e0, e1])
break
else:
stack.append(ran)
break
return len(stack)
print(main(rans, n))