# acwing803 区间合并
'''
给定 n个区间 [li,ri],要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3] 和 [2,6]可以合并为一个区间 [1,6]。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含两个整数l和 r。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
1≤n≤100000,−10^9≤li≤ri≤10^9
输入样例:
5
1 2
2 4
5 6
7 8
7 9
输出样例:
3
'''
'''
思想:
1. 按照区间的左端点进行排序
2. scan整个区间
'''
n = int(input())
a = [] # a存放输入的几个区间
res = [] # 最终得到的区间合并后的结果
for _ in range(n):
l,r = map(int,input().split())
a.append((l,r))
a = sorted(a,key=lambda x:(x[0],x[1])) # 利用参数key排序,区间按左端点排序,再按右端点排序
for i in range(n):
if res: # res不为0
if res[-1][1]>=a[i][0]: #区间i+1的左端点与区间i的右端点比较,如果区间i的右端点大于区间i+1,则右端点取两个区间端点的最大值
res[-1][1]=max(res[-1][1],a[i][1])
else:
# 否则 则前面那个区间无法合并,没有与后面区间有交集
res.append([a[i][0],a[i][1]])
else: #res为空的时候,将第一区间加上
res.append([a[0][0],a[0][1]])
print(len(res))
acwing 803 区间合并 Python 蓝桥杯
最新推荐文章于 2024-06-11 18:43:53 发布