当前位置: 首页 > news >正文

【算法】 区间合并(附蓝桥杯真题) python


步骤


1.先将所有区间按左端点排序
2.从前往后扫一遍,维护当前正在合并的区间[st, ed]
3.依次检查每个区间[l, r]
l > ed,将[st, ed]加入 ans , 更新st = l,ed = r
l <= ed ,更新ed = max(ed, r)

时间复杂度 O(nlogn)


模板


https://www.acwing.com/problem/content/description/424/


code:

l, m = map(int, input().split())  
grid = [list(map(int, input().split())) for _ in range(m)]  
grid.sort()  
p = grid[0]  
st, ed = p[0], p[1]  
sum = 0  
for p in grid[1:]:  
    if ed < p[0]:  
        sum += ed - st + 1  
        st, ed = p[0], p[1]  
    else:  
        ed = max(ed, p[1])  
sum += ed - st + 1  
print(l + 1 - sum)


小试牛刀


https://www.acwing.com/problem/content/1345/


code:

n = int(input())  
grid = [list(map(int, input().split())) for _ in range(n)]  
grid.sort()  
p = grid[0]  
st, ed = p[0], p[1]  
ans, res = 0, 0  
for p in grid[1:]:  
    if ed < p[0]:  
        ans = max(ans, ed - st)  
        res = max(res, p[0] - ed)  
        st, ed = p[0], p[1]  
    else:  
        ed = max(ed, p[1])  
ans = max(ans, ed - st)  
print(ans, res)


真题演练


第十四届蓝桥杯省赛Python B 组 D 题


二分答案 + 区间合并


AC_code:

import sys  
input = sys.stdin.readline  
inf = float('inf')  
  
n, length = map(int, input().split())  
grid = [list(map(int, input().split())) for _ in range(n)]  
  
def check(mid):  
    a = []  
    for pos, t in grid:  
        if t > mid:  
            continue  
        l = max(1, pos - (mid - t))  
        r = min(length, pos + (mid - t))  
        a.append((l, r))  
    a.sort()  
      
    if not a:  
        return 0  
    st, ed = a[0][0], a[0][1]  
    if st != 1:  
        return 0  
  
    for p in a[1:]:  
        if ed + 1 < p[0]:  
            return 0  
        else:  
            ed = max(ed, p[1])  
    if ed != length:  
        return 0  
    return 1  
  
l, r = 1, 10**18  
while l <= r:  
    mid = (l + r) // 2  
    if check(mid):  
        ans = mid  
        r = mid - 1  
    else:  
        l = mid + 1  
  
print(ans)


END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢

相关文章:

  • 如何解决:[/robot_state_publisher] Reason: new node registered with same name]
  • 群体智能优化算法-金豺优化算法(Golden Jackal Optimization, GJO,含Matlab源代码)
  • Go语言进化之旅:从1.18到1.24的语法变革
  • Spring 中的 bean 作用域
  • [AI] 从Trellis AI 模型生成本地化部署到投入Pinokio怀抱
  • K8S学习之基础二十九:K8S中的secret
  • 数据结构------线性表
  • 使用VisualStdio制作上位机(一)
  • Java 多线程编程:提升系统并发处理能力!
  • 常见限流算法及实现
  • python练习2
  • Java集合 - HashMap
  • 基于银河麒麟系统ARM架构安装达梦数据库并配置主从模式
  • 编程语言的几种常见的分类方法
  • NET进行CAD二次开发之二
  • bgp服务器是什么意思
  • 4060ti-16G显卡部署deepseek-32B(支持联网搜索)
  • Touch panel功能不良分析
  • 深入解析 Latent Diffusion Model(潜在扩散模型,LDMs)(代码实现)
  • MSP430 Proteus 仿真作品
  • vps网站能打开/电商网页
  • 郑州公司企业网站建设/百度推广查询
  • 上海opencart网站建设/网站推广的具体方案
  • 做网站好用的cms/百度的人工客服
  • 科技有限公司网站建设策划书/网站建设企业
  • 建筑公司网站应该则么做/个人如何做网络推广