python每日一题——14合并区间

题目

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

答案

这个问题可以通过使用并查集(Disjoint Set Union)数据结构来解决。并查集可以高效地合并和查找不相交的集合,这正是我们在这个问题中需要的。

下面是一个 Python 实现的解决方案:

def merge(intervals):# 定义一个并查集类class UnionFind:def __init__(self, n):self.parent = list(range(n))self.rank = [0]*ndef find(self, x):if self.parent[x] != x:self.parent[x] = self.find(self.parent[x])return self.parent[x]def union(self, x, y):root_x = self.find(x)root_y = self.find(y)if root_x != root_y:if self.rank[root_x] > self.rank[root_y]:self.parent[root_y] = root_xelse:self.parent[root_x] = root_yif self.rank[root_x] == self.rank[root_y]:self.rank[root_y] += 1# 初始化并查集n = len(intervals)uf = UnionFind(n)# 按照区间的结束点进行排序intervals.sort(key=lambda x: x[1])# 遍历区间列表,合并重叠的区间merged = []end = 0  # 当前合并区间的结束点for start in range(len(intervals)):if start > 0 and intervals[start][0] == end:  # 与前一个区间有重叠merged[-1][1] = max(merged[-1][1], intervals[start][1])  # 更新前一个合并区间的结束点else:  # 与前一个区间无重叠,新建一个合并区间merged.append([intervals[start][0], intervals[start][1]])end = intervals[start][1]  # 更新当前合并区间的结束点merged[-1][1] = end  # 处理最后一个合并区间,保证其结束点为最后一个区间的结束点return merged

代码的执行过程如下:

  1. 首先创建一个并查集对象,用来存储每个区间的父节点和每个集合的秩(树的高度)。秩被用来在合并两个集合时确定哪棵树应该成为新的根节点。
  2. 然后将区间按照结束点进行排序,这样可以保证在处理每个区间时,所有与它重叠的区间都已经处理过。这是因为我们希望合并重叠的区间,而不是将它们分开。
  3. 遍历排序后的区间列表。对于每个区间,如果它与前一个区间有重叠(即它的开始点等于前一个区间的结束点),则更新前一个合并区间的结束点为这两个区间的最大结束点。否则,新建一个合并区间,并将当前区间的开始点和结束点作为新合并区间的开始点和结束点。在每次新建或更新合并区间后,更新当前合并区间的结束点。最后,处理完最后一个合并区间后,再次更新其结束点,以保证其结束点与最后一个区间的结束点相同。

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

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

相关文章

AIGC:文本生成视频

项目1:GitHub - ai-forever/KandinskyVideo: KandinskyVideo — multilingual end-to-end text2video latent diffusion model 效果未知

IDEA插件:Apipost Helper使用

Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里…

YOLOv8改进 | 2023 | DWRSeg扩张式残差助力小目标检测 (附修改后的C2f+Bottleneck)

论文地址:官方论文地址 代码地址:该代码目前还未开源,我根据论文内容进行了复现内容在文章末尾。 一、本文介绍 本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv8中的C2f和Bottleneck模块,主要针对的是小目标检测&#xff0c…

【GraphQL】什么是Prisma?

本页提供了Prisma及其工作原理的高级概述。 什么是Prisma? Prisma是一个开源的下一代ORM。它由以下部分组成: Prisma客户端:Node.js和TypeScript的自动生成和类型安全查询生成器Prisma迁移:迁移系统Prisma Studio:GUI&#xff0…

JVM——内存溢出和内存泄漏

目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/058d113715b…

BIO、NIO、selector、Netty代码Demo示例

文章目录 (一)BIO(Blocking I/O 阻塞I/O)(二)NIO(Non-Blocking I/O 非阻塞I/O)(三)IO多路复用--Selector(四)Netty (一&am…

【hacker送书第5期】SQL Server从入门到精通(第5版)

第5期图书推荐 内容简介作者简介图书目录参与方式 内容简介 SQL Server从入门到精通(第5版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了SQL Server开发所必需的各方面技术。全书分为4篇共19章,…

C陷阱与缺陷——第5章库函数

1. 返回整数的getchar函数 #include <stdio.h>main() {char c;while((c getchar()) ! EOF){putchar(c);} } 上述函数是错误的&#xff0c;原因在于程序中的变量c被声明为char类型&#xff0c;而不是int类型&#xff0c;这意味着c无法容下所有可能的字符&#xff0c;特…

Java,反射机制与反射的应用

关于反射&#xff1a; 有时对象的编译时类型和运行时类型是不一致的。比如在使用多态的场景下&#xff0c;有一个Object类型的数组&#xff0c;其中的元素有着各种不同的类型&#xff0c;而调用相应的元素的方法时&#xff0c;比如调用toString方法时&#xff0c;希望调用的是…

优化机器学习:解析数据归一化的重要性与应用

在机器学习中&#xff0c;数据归一化是一种数据预处理的技术&#xff0c;旨在将数据转换为相似的范围或标准化的分布。这样做的主要目的是消除不同特征之间的量纲差异或数值范围差异&#xff0c;以确保模型在训练时更稳定、更有效地学习特征之间的关系。 通常&#xff0c;机器…

linux下ffmpeg安装

1.下载安装MP3编码库 因为FFmpeg默认只支持mp3的解码&#xff0c;不支持mp3编码。如果想把提取出来的音频保存为mp3格式肯定就需要mp3格式的编码库。因此&#xff0c;想输出mp3文件&#xff0c;需要借助第三方的mp3编码库。这里采用LAME编码库&#xff0c;即Lame Aint an MP3 E…

智能优化算法应用:基于水循环算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于水循环算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于水循环算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.水循环算法4.实验参数设定5.算法结果6.参考文献7.…

Oracle把多行查询结果合并为一行

SELECT zjxm FROM pb_zjzcy&#xff0c;Oracle数据库&#xff0c;把zjxm合并到一个字段 在Oracle数据库中&#xff0c;你可以使用LISTAGG函数将多个行中的zjxm字段合并到一个字段中。以下是一个示例查询&#xff1a; SELECT LISTAGG(zjxm, ,) WITHIN GROUP (ORDER BY zjxm) A…

安卓apk抓包

起因 手机&#xff08;模拟器&#xff09;有时候抓不到apk的包&#xff0c;需要借助Postern设置一个代理&#xff0c;把模拟器的流量代理到物理机的burp上。 解决方案 使用Postern代理&#xff0c;把apk的流量代理到burp。 Postern是一个用于代理和网络流量路由的工具&#xf…

C++ day44完全背包问题 零钱兑换Ⅱ 组合总和Ⅳ

完全背包&#xff1a;一个物品可以使用无数次&#xff0c;将01背包中倒序遍历背包变成正序遍历背包 遍历顺序&#xff1a;在完全背包中&#xff0c;对于一维dp数组来说&#xff0c;其实两个for循环嵌套顺序是无所谓的&#xff01; 先遍历物品&#xff0c;后遍历背包可以&#…

win10 下 mvn install 报错:编码GBK不可映射字符

问题背景 由于jenkins需要部署不同的项目&#xff0c;需要使用不同的jdk版本&#xff0c;所以需要配置单独的settings.xml&#xff0c;使用指定的jdk版本进行编译&#xff0c;这里需要单独的maven设置&#xff0c;在配置完后进行mvn的install的时候&#xff0c;由于存在中文注释…

Maven——Maven使用基础

1、安装目录分析 1.1、环境变量MAVEN_HOME 环境变量指向Maven的安装目录&#xff0c;如下图所示&#xff1a; 下面看一下该目录的结构和内容&#xff1a; bin&#xff1a;该目录包含了mvn运行的脚本&#xff0c;这些脚本用来配置Java命令&#xff0c;准备好classpath和相关…

在 Nginx 配置中,root 和 alias 指令的区别是什么

疑问root和alias的区别是什么, 如下 location / {alias /Users/lixinyu/MySpace/学成在线-plus/xc-ui-pc-static-portal/;index index.html index.htm;}location / {root /Users/lixinyu/MySpace/学成在线-plus/xc-ui-pc-static-portal/;index index.html index.htm;}解释…

Cytoscape软件下载、安装、插件学习[基础教程]

写在前面 今天分享的内容是自己遇到问题后&#xff0c;咨询社群里面的同学&#xff0c;帮忙解决的总结。 关于Cytoscape&#xff0c;对于做组学或生物信息学的同学基本是陌生的&#xff0c;可能有的同学用这个软件作图是非常溜的&#xff0c;做出来的网络图也是十分的好看&am…

【海思SS528 | VDEC】MPP媒体处理软件V5.0 | VDEC的使用总结

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…