华为OD机试真题 Python 实现【区间连接器】【2023Q1 200分】,附详细解题思路

news2024/10/7 6:47:14

在这里插入图片描述

一、题目描述

有一组区间 [a0, b0], [a1, b1], … (a, b 表示起点, 终点),区间有可能重叠、相邻,重叠或相邻则可以合并为更大的区间;

给定一组连接器[x1, x2, x3, …](x 表示连接器的最大可连接长度,即 x>=gap),可用于将分离的区间连接起来,但两个分离区间之间只能使用1个连接器;

请编程实现使用连接器后,最少的区间数结果。

区间数量 <10000;a,b 均 <=10000;

连接器梳理 <10000; x <=10000;

二、输入描述

区间组:[1,10],[15,20],[18,30],[33,40]

连接器组:[5,4,3,2]

三、输出描述

1

说明:合并后:[1,10], [15,30], [33,40],使用 5, 3 两个连接器连接后只剩下 [1,40]

四、解题思路

  1. 读取输入的区间组和连接器组。
  2. 将区间组字符串解析为一个二维整数数组rangeArr,每个子数组表示一个区间的起点和终点。
  3. 将连接器组字符串解析为一个整数列表connectList,表示每个连接器的最大可连接长度。
  4. 对区间组按照起点进行升序排序。
  5. 创建一个链表mergeRanges,用于存储合并后的区间。
  6. 将第一个区间加入mergeRanges链表。
  7. 创建一个链表linked,用于存储相邻区间之间的间隔距离。
  8. 遍历区间组的剩余区间(从第二个区间开始):
    • 获取mergeRanges链表的最后一个区间的起点和终点。
    • 获取当前区间的起点和终点。
    • 如果当前区间与最后一个区间重叠或相邻(起点小于等于最后一个区间的终点):
      • 移除mergeRanges链表的最后一个区间。
      • 更新最后一个区间的终点为当前区间的终点和最后一个区间的终点的较大值。
    • 否则,将当前区间添加到mergeRanges链表中,并计算当前区间与上一个区间之间的间隔距离(r1 - b)。
      • 将间隔距离添加到linked链表中。
  9. 对linked链表和connectList列表进行降序排序。
  10. 当connectList和linked都还有元素时:
    • 如果connectList的最后一个元素大于等于linked的最后一个元素:
      • 移除connectList的最后一个元素。
      • 移除linked的最后一个元素。
  11. 输出linked链表的长度加1作为结果。

五、Python算法源码

def calculate_min_intervals(range_arr, connect_list):
    range_arr.sort(key=lambda x: x[0])

    merge_ranges = [range_arr[0]]
    linked = []

    for i in range(1, len(range_arr)):
        last = merge_ranges[-1]
        a, b = last
        r1, r2 = range_arr[i]

        if r1 <= b:
            merge_ranges.pop()
            merge_ranges.append([a, max(b, r2)])
        else:
            linked.append(r1 - b)
            merge_ranges.append(range_arr[i])

    linked.sort(reverse=True)
    connect_list.sort(reverse=True)

    while connect_list and linked:
        if connect_list.pop() >= linked[-1]:
            linked.pop()

    return len(linked) + 1


六、效果展示

1、输入

[1,10],[15,20],[18,30],[33,40]
[5,4,3,2]

2、输出

1

在这里插入图片描述



🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python网络编程笔记(一)

一&#xff1a;Socket简介 套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同 -台主机上多个应用程序之间的通讯BSD Socket接口是TCP/IP网…

ArcMap发布arcgis sever缓存瓦片服务

1.全能电子地图下载瓦片地图 2.地图拼接 acrgis sever缓存瓦片 下载完成的文件目录 3.arcMap添加数据 连接本地文件 这一步有坑&#xff0c;一定要加载到瓦片最外层目录&#xff0c;否则看不到图层文件。 找到图层数据&#xff0c;点击添加 添加数据完成&#xff0c;开始发布服…

数字化和物联网的发展如何改变我们的生活方式?

数字化和物联网 (IoT) 的发展已经给我们的生活方式带来了重大变化&#xff0c;而且这些变革将在未来继续发生。以下是数字化和物联网影响我们生活的一些方式&#xff1a; 连接设备和智能家居&#xff1a;物联网使日常物品能够连接到互联网并相互通信。这种连通性允许创建智能家…

记录一次oracle报错IMP-00058: 遇到 ORACLE 错误 904 ORA-00904: “xxx“: 标识符无效

错误原因&#xff1a;导入的表中缺少DATASRC字段 解决方法&#xff1a;在要导入的表中加上DATASRC字段

对 React 状态管理的理解及方案对比

1、React 状态、通信 React 为什么需要状态管理 React 特点&#xff1a; 专注 view 层&#xff1a;专注 view 层 的特点决定了它不是一个全能框架&#xff0c;相比 angular 这种全能框架&#xff0c;React 功能较简单&#xff0c;单一。UIrender(data)UIrender(data)&#x…

Keras-深度学习-神经网络-人脸识别模型

目录 模型搭建 模型训练 模型搭建 ①导入所需的库&#xff0c;导入了 Keras 和其他必要的库&#xff0c;用于构建和处理图像数据。 from keras.models import Sequential from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D import os from PIL import Image …

《C++高级编程》读书笔记(十二:利用模板编写泛型代码)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. 模板概述 模板将参数化的概念推进了一步&#xff0c;不仅允许…

用Python搭建监控平台详解

概要 监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时…

oracle 自定义类型(type)的用法

emp表数据如下所示 定义object类型 create or replace type typeof_userinfo_row as object(user_id varchar2(50),user_name varchar2(50) )创建函数并将此类型作为返回值类型 create or replace function FUN_TEST return typeof_userinfo_row isFunctionResult typeof_use…

互联网业务全球化互通组网

随着互联网业务的快速发展&#xff0c;越来越多的企业开始全球化扩张业务&#xff0c;并需要在全球范围内建立互联网组网以实现业务数据的高效传输。在这个过程中&#xff0c;如何建立高效、稳定的全球互联网组网方案&#xff0c;是每个企业都需要考虑的问题。 一种可行的方案…

springboot 上传文件

在Spring Boot中&#xff0c;可以使用RequestParam注解来接收文件。 在你的控制器方法中&#xff0c;使用RequestParam注解来声明一个MultipartFile类型的参数来接收上传的文件 MultipartFile是spring类型&#xff0c;代表HTML中form data方式上传的文件&#xff0c;包含二进制…

【C语言操作符优先级】

C语言操作符优先级 C语言操作符1、操作符的优先级序表2、操作符的属性2.1、操作符优先级运算例程12.2、操作符优先级运算例程2 C语言操作符 前言&#xff1a; &#xff08;1&#xff09;在我们熟悉的数学加减乘除运算中&#xff0c;都知道先乘除再加减&#xff0c;有括号的先算…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是&#xff1a;没有找到webpack模块。 就算之前你装了webpack&#xff0c;那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

数据库管理-第八十六期 19c OCM之路-第一堂(01)(20230628)

数据库管理 2023-06-28 第八十六期 19c OCM之路-第一堂&#xff08;01&#xff09;1 环境补充说明2 第一堂-01考点1&#xff1a;Create a pluggable database 创建PDB考点2&#xff1a;Create tablespace 创建表空间考点3&#xff1a;Managing undo 管理undo 总结 第八十六期 1…

【无名管道】无名管道(Pipe)与进程通信:快速上手

目录 0. 管道概述&#xff1a; 1. 管道特点 2. 管道创建&#xff1a;pipe函数 3. 管道的读写特点 4. 通过fcntl函数设置文件的阻塞特性 5. 查看管道缓冲区命令 总结&#xff1a; 0. 管道概述&#xff1a; 管道也叫无名管道&#xff0c;它是是 UNIX 系统 IPC&#xff08;…

019、数据库管理之备份恢复管理(BR)

备份的重要性 数据库恢复审计和分析典型DBA任务 备份的类型 热备&#xff0c;允许应用程序完全访问数据。冷备&#xff0c;不允许应用程序访问年数据温备&#xff0c;允许应用程序读取&#xff0c;但不能修改 热备份 热备份是在读取和修改数据时进行的&#xff0c;几乎不会…

怎么高效批量调整视频的尺寸大小

大家平时在剪辑视频的过程中&#xff0c;是否会遇到视频尺寸大小不合适的情况&#xff0c;当我们遇到这种情况时&#xff0c;如何才能快速批量地解决呢&#xff1f;有没有什么方法可以快速批量修改视频尺寸大小呢&#xff1f;跟着小编一起来看看我平时批量修改视频尺寸的方法。…

联邦学习的架构思想

目录 联邦学习介绍&#xff08;非常详细&#xff09; 联邦学习的由来 联邦学习的发展历程 1) 机器学习 2) 分布式机器学习 3) 隐私保护技术 4) 联邦学习 联邦学习的规范与标准 联邦学习的架构思想 联邦学习的社区与生态 联邦学习介绍&#xff08;非常详细&#xff09…

Lenovo联想笔记本电脑 小新 Air-14 2020 Intel平台IIL版(81YJ)原装Win10系统恢复原厂OEM预装专用系统

Lenovo联想笔记本电脑&#xff0c;小新 Air-14 2020 Intel平台IIL版(81YJ)出厂Windows10系统原装系统镜像&#xff0c;恢复原厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1…

基于微信小程序的上课签到系统(数据库+报告+文档+演示视频)

系统技术语言介绍&#xff1a; 本系统采用了SSM (Spring Spring MVC Mybatis&#xff09;架构&#xff0c; MySQL作为基础数据库&#xff0c;微信开发工具作为前端基础&#xff0c;前端采用了 wxml的设计语言&#xff0c;Idea作为后台的开发工具。 功能列表&#xff1a; 1.…