合并区间[中等]
一、题目
以数组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]可被视为重叠区间。
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
二、代码
排序: 如果我们按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并成一个大区间,它们在排完序的列表中是连续的:

算法: 我们用数组merged存储最终的答案。首先,我们将列表中的区间按照左端点升序排序。然后我们将第一个区间加入merged数组中,并按顺序依次考虑之后的每个区间:
【1】如果当前区间的左端点在数组merged中最后一个区间的右端点之后,那么它们不会重合,我们可以直接将这个区间加入数组merged的末尾;
【2】否则,它们重合,我们需要用当前区间的右端点更新数组merged中最后一个区间的右端点,将其置为二者的较大值。
正确性证明: 上述算法的正确性可以用反证法来证明:在排完序后的数组中,两个本应合并的区间没能被合并,那么说明存在这样的三元组(i,j,k)以及数组中的三个区间a[i],a[j],a[k]满足i<j<k并且(a[i],a[k])可以合并,但(a[i],a[j])和(a[j],a[k])不能合并。这说明它们满足下面的不等式:
a[i].end<a[j].start(a[i]和a[j]不能合并)
a[j].end<a[k].start(a[j]和a[k]不能合并)
a[i].end≥a[k].start(a[i]和a[k]可以合并)
我们联立这些不等式(注意还有一个显然的不等式a[j].start≤a[j].end,可以得到:a[i].end<a[j].start≤a[j].end<a[k].start产生了矛盾!这说明假设是不成立的。因此,所有能够合并的区间都必然是连续的。
class Solution {public int[][] merge(int[][] intervals) {if (intervals.length == 0) {return new int[0][2];}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return interval1[0] - interval2[0];}});List<int[]> merged = new ArrayList<int[]>();for (int i = 0; i < intervals.length; ++i) {int L = intervals[i][0], R = intervals[i][1];if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {merged.add(new int[]{L, R});} else {merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);}}return merged.toArray(new int[merged.size()][]);}
}
时间复杂度: O(nlogn),其中n为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的O(nlogn)。
空间复杂度: O(logn),其中n为区间的数量。这里计算的是存储答案之外,使用的额外空间。O(logn)即为排序所需要的空间复杂度。
相关文章:
合并区间[中等]
一、题目 以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 示例 1: 输入:intervals […...
MYSQL基础知识之【LIKE子句的使用 ,NULL值的处理,空值的处理】
文章目录 前言MySQL LIKE 子句在PHP脚本中使用 LIKE 子句 MySQL NULL 值处理在命令提示符中使用 NULL 值使用PHP脚本处理 NULL 值 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱👓博主在前端领域还有…...
线索二叉树:C++实现
引言: 线索二叉树是一种特殊的二叉树,它可以通过线索(线索是指在二叉树中将空指针改为指向前驱或后继的指针)的方式将二叉树转化为一个线性结构,从而方便对二叉树进行遍历。本文将介绍如何使用C实现线索二叉树。 技术…...
C++——vector互换容器与预留空间
一.vector互换容器 功能描述:实现两个容器内元进行互换 函数原型: swap(vec); //将vec与本身的元素互换 实例: //1.基本使用 void test01() {vector<int>v1;for (int i 0; i < 10; i){v1.push_back(i);}cout << "交换前:" << e…...
Unity 自带的一些可以操控时间的属性或方法。
今天来总结下Unity自带的一些可以操控时间的方法。 1、Time.time。比较常用计算运行时间而触发特定事件。 public class Controller : MonoBehaviour {public float eventTime 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startT…...
vue 项目中使用 mqtt
1、在html 中用cdn方式引入 <script src"https://unpkg.com/mqtt/dist/mqtt.min.js"></script> 2、封装代码 mqtt_connect.js // import * as mqtt from mqtt/dist/mqtt.min // 不知道为什么 我用引入的方式不成,就在html 用的cdn方式接入了…...
linux shell操作 - 05 进程 与 IO 模型
文章目录 计算机内存分配进程与子进程流IO模型非阻塞IOIO多路复用网络IO模型简单的socket并发的socket 计算机内存分配 一个32位,4G内存的计算机,内存使用分为两部分: 操作系统内核空间;应用程序的用户空间使用的操作系统不同&a…...
让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发
上一篇我们介绍了SOME/IP矩阵的设计流程,这一篇重点介绍如何把SOME/IP矩阵顺利的交给下游软件团队进行开发。 车载以太网通信矩阵开发完成后,下一步应该做什么? 当我们完成SOME/IP矩阵开发,下一步需要把开发完成的矩阵换成固定格…...
Mybatis反射工厂类DefaultReflectorFactory
DefaultReflectorFactory是反射工厂接口ReflectorFactory的默认实现,其主要是实现了对反射对象Reflector的创建和缓存。 有三个方法: // 判断是否开启缓存boolean isClassCacheEnabled();// 设置是否缓存void setClassCacheEnabled(boolean classCacheEn…...
antDesignPro a-table样式二次封装
antDesignPro是跟element-ui类似的一个样式框架,其本身就是一个完整的后台系统,风格样式都很统一。我使用的是antd pro vue,版本是1.7.8。公司要求使用这个框架,但是UI又有自己的一套设计。这就导致我需要对部分组件进行一定的个性…...
找免费4K高清图片素材,就上这6个网站
使用图片素材怕侵权?那就上这6个网站,免费下载,4K高清无水印,赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 一个很大的素材库,站内主要还是以设计素材为主,像图片素材就有上百…...
代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
JAVA代码编写 860.柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须…...
成为AI产品经理——TPR、FPR、ROC、AUC
目录 一、PR图、BEP 1.PR图 2.BEP 二、灵敏度、特异度 1.灵敏度 2.特异度 三、真正率、假正率 1.真正率 2.假正率 三、ROC、AUC 1.ROC 2.AUC 四、KS值 一、PR图、BEP 1.PR图 二分类问题模型通常输出的是一个概率值,我们需要设定一个阈值ÿ…...
java: Internal error in the mapping processor: java.lang.NullPointerException
启动java项目出错,其他人工程没有问题,别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…...
TCP知识点
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议,广泛应用于互联网。下面是TCP的一些知识点: TCP是一种可靠的协议,采用三次握手建立连接和四次挥手断开…...
大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)
本期文章,我们将通过三个动手实验从浅到深地解读和演示大语言模型(LLMs),如何结合 Amazon SageMaker 的模型部署、模型编译优化、模型分布式训练等。 实验一:使用 Amazon SageMaker 构建基于开源 GPT-J 模型的对话机器…...
顶级数据恢复工具—— 最全的15个数据恢复软件榜单
在这个信息为王的数字时代,关键数据的丢失对个人和企业来说都可能是灾难性的。无论是由于意外删除、硬件故障还是恶意攻击,拥有强大的数据恢复解决方案都是至关重要的。在本综合指南中,我们将探索市场上最好的数据恢复软件,包括顶…...
【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解
【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解前言Inception-ResNet讲解Inception-ResNet-V1Inception-ResNet-V2残差模块的缩放(Scaling of the Residuals)Inception-…...
Ubuntu 22.03 LTS 安装deepin-terminal 实现 终端 分屏
deepin-terminal 安装 源里面自带了这个软件,可以直接装 sudo apt install deepin-terminal 启动 按下Win键,输入deep即可快速检索出图标,点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口࿰…...
HTTP协议,Web框架回顾
HTTP 请求协议详情 -请求首行---》请求方式,请求地址,请求协议版本 -请求头---》key:value形式 -referer:上一次访问的地址 -user-agenet:客户端类型 -name:lqz -cookie&…...
基于Docker与vLLM的大模型部署实战:从环境搭建到性能调优
1. 环境准备:Docker与GPU基础配置 在开始部署大模型之前,我们需要先搭建好基础环境。我推荐使用Docker来管理环境,因为它能解决依赖冲突问题,还能实现一键部署。不过要注意,如果你的机器没有NVIDIA显卡,后续…...
终极指南:如何免费解锁Cursor Pro高级功能,告别试用限制困扰
终极指南:如何免费解锁Cursor Pro高级功能,告别试用限制困扰 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve…...
Jenkins 学习总结几
先唠两句:参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜,它是菜单(资源路径)的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...
别再手动加电阻了!手把手教你用Xilinx 7系列FPGA的DCI功能搞定高速信号完整性
别再手动加电阻了!手把手教你用Xilinx 7系列FPGA的DCI功能搞定高速信号完整性 当你在设计一块高速数据采集卡时,是否曾被密密麻麻的端接电阻搞得焦头烂额?每个LVDS差分对需要两个100Ω电阻,DDR3接口每根数据线又得配一个39Ω电阻.…...
Android AAudio低延迟音频流实战:从独占模式到性能调优
1. AAudio低延迟音频流的核心价值 在移动音频开发领域,延迟是影响用户体验的关键指标。想象一下你正在玩一款音乐游戏,每次敲击屏幕到听到声音反馈的时间如果超过20毫秒,就会明显感觉到操作和声音不同步。这就是AAudio诞生的背景——它专为解…...
GoldHEN Cheats Manager:PS4游戏修改功能的一站式解决方案
GoldHEN Cheats Manager:PS4游戏修改功能的一站式解决方案 【免费下载链接】GoldHEN_Cheat_Manager GoldHEN Cheats Manager 项目地址: https://gitcode.com/gh_mirrors/go/GoldHEN_Cheat_Manager 在PlayStation 4的定制化游戏体验领域,GoldHEN C…...
Phi-4-mini-reasoning 3.8B 轻量模型Python入门实战:零基础快速上手AI推理
Phi-4-mini-reasoning 3.8B 轻量模型Python入门实战:零基础快速上手AI推理 1. 为什么选择Phi-4-mini-reasoning Phi-4-mini-reasoning是一款专为推理任务优化的轻量级大模型,参数规模3.8B,在保持较高推理能力的同时大幅降低了硬件需求。对于…...
手把手教你用LingBot-Depth:普通照片秒变3D场景,新手必看
手把手教你用LingBot-Depth:普通照片秒变3D场景,新手必看 1. 为什么你需要LingBot-Depth? 想象一下,你手机里的普通照片突然变成了可以测量距离、生成3D模型的智能图像——这就是LingBot-Depth能为你带来的魔法。这个AI模型专门…...
RexUniNLU保姆级教程:日志埋点+Prometheus监控+NLU服务性能大盘搭建
RexUniNLU保姆级教程:日志埋点Prometheus监控NLU服务性能大盘搭建 1. 为什么需要监控NLU服务? 当你把RexUniNLU部署到生产环境后,会发现几个现实问题:用户说服务响应时快时慢,但不知道具体慢在哪里;出现识…...
大模型位置编码进化史:从Sinusoidal到RoPE的5个关键突破
大模型位置编码进化史:从Sinusoidal到RoPE的5个关键突破 在自然语言处理领域,位置编码技术如同给模型装上了"空间感知"系统,让原本对序列顺序"视而不见"的Transformer架构获得了理解词序关系的能力。本文将带您深入探索这…...
