情况一:给定个区间,把所有能够合并的区间合并在一起,最后输出不能再继续合并的区间总数,就类似于分式化简一样。
题目如下:
看到这道题目,首先需要做的就是定义合并后的左端点和右端点,最后的总区间数设为=
每合并一个区间后,总数就减去一。那么问题来了:如何合并两个区间呢?
第一,按照题目要求将区间以元组的形式读入进列表变量:,并按照左端点进行排序
#区间合并
n = int(input())
qj = []
for i in range(n):
l,r = map(int,input().split())
qj.append((l,r))
qj.sort()
第二,定义第一个能够合并区间的左右端点。其实也没有必要关注左端点,但是为了整体的统一与理解的方便就还是写上了。
l ,r = qj[0][0] , qj[0][1]
sum_qj = n
最后就是右端点的不断变化合并
for i in range(1,n):#从第2个区间一直遍历到第n个区间
if r >= qj[i][0]: #如果前一个区间的右端点能够大于等于当前区间的左端点,说明能够合并这两个区间
r = max(r,qj[i][1])
#因为前一个区间右端点不一定会小于后一个区间的右端点,所以需要取二者的最大值
sum_qj-=1 #每合并一个区间后,总区间数就要减去1
else:
l,r = qj[i][0],qj[i][1]
print(sum_qj)
变式:
1.输出所和并的这几个区间
for i in range(1,n):
if r >=qj[i][0]:
r = max(r,qj[i][1])
else:
print(l,r)
l = qj[i][0]
r = qj[i][1]
print(l,r)
2.输出合并区间中的最大区间长度,以及这个区间的左右端点
用一个变量保留所有输出的区间即可,然后再用循环输出