蓝桥杯基础算法:区间合并

本文介绍了如何使用Python实现区间合并问题,包括读入区间、排序、合并操作以及两种变式输出:合并后的区间列表和最大区间长度。
摘要由CSDN通过智能技术生成

情况一:给定n个区间,把所有能够合并的区间合并在一起,最后输出不能再继续合并的区间总数,就类似于分式化简一样。

题目如下:

看到这道题目,首先需要做的就是定义合并后的左端点l和右端点r,最后的总区间数设为sum=n

每合并一个区间后,总数就减去一。那么问题来了:如何合并两个区间呢?

第一,按照题目要求将区间以元组的形式读入进列表变量:qj,并按照左端点进行排序

#区间合并
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.输出合并区间中的最大区间长度,以及这个区间的左右端点

     用一个变量保留所有输出的区间即可,然后再用循环输出

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值