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

合并区间[中等]

一、题目

以数组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(nlog⁡n),其中n为区间的数量。除去排序的开销,我们只需要一次线性扫描,所以主要的时间开销是排序的O(nlog⁡n)
空间复杂度: O(log⁡n),其中n为区间的数量。这里计算的是存储答案之外,使用的额外空间。O(log⁡n)即为排序所需要的空间复杂度。

相关文章:

合并区间[中等]

一、题目 以数组intervals表示若干个区间的集合&#xff0c;其中单个区间为intervals[i] [starti, endi]。请你合并所有重叠的区间&#xff0c;并返回一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间。 示例 1&#xff1a; 输入&#xff1a;intervals […...

MYSQL基础知识之【LIKE子句的使用 ,NULL值的处理,空值的处理】

文章目录 前言MySQL LIKE 子句在PHP脚本中使用 LIKE 子句 MySQL NULL 值处理在命令提示符中使用 NULL 值使用PHP脚本处理 NULL 值 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有…...

线索二叉树:C++实现

引言&#xff1a; 线索二叉树是一种特殊的二叉树&#xff0c;它可以通过线索&#xff08;线索是指在二叉树中将空指针改为指向前驱或后继的指针&#xff09;的方式将二叉树转化为一个线性结构&#xff0c;从而方便对二叉树进行遍历。本文将介绍如何使用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 // 不知道为什么 我用引入的方式不成&#xff0c;就在html 用的cdn方式接入了…...

linux shell操作 - 05 进程 与 IO 模型

文章目录 计算机内存分配进程与子进程流IO模型非阻塞IOIO多路复用网络IO模型简单的socket并发的socket 计算机内存分配 一个32位&#xff0c;4G内存的计算机&#xff0c;内存使用分为两部分&#xff1a; 操作系统内核空间&#xff1b;应用程序的用户空间使用的操作系统不同&a…...

让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发

上一篇我们介绍了SOME/IP矩阵的设计流程&#xff0c;这一篇重点介绍如何把SOME/IP矩阵顺利的交给下游软件团队进行开发。 车载以太网通信矩阵开发完成后&#xff0c;下一步应该做什么&#xff1f; 当我们完成SOME/IP矩阵开发&#xff0c;下一步需要把开发完成的矩阵换成固定格…...

Mybatis反射工厂类DefaultReflectorFactory

DefaultReflectorFactory是反射工厂接口ReflectorFactory的默认实现&#xff0c;其主要是实现了对反射对象Reflector的创建和缓存。 有三个方法&#xff1a; // 判断是否开启缓存boolean isClassCacheEnabled();// 设置是否缓存void setClassCacheEnabled(boolean classCacheEn…...

antDesignPro a-table样式二次封装

antDesignPro是跟element-ui类似的一个样式框架&#xff0c;其本身就是一个完整的后台系统&#xff0c;风格样式都很统一。我使用的是antd pro vue&#xff0c;版本是1.7.8。公司要求使用这个框架&#xff0c;但是UI又有自己的一套设计。这就导致我需要对部分组件进行一定的个性…...

找免费4K高清图片素材,就上这6个网站

使用图片素材怕侵权&#xff1f;那就上这6个网站&#xff0c;免费下载&#xff0c;4K高清无水印&#xff0c;赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 一个很大的素材库&#xff0c;站内主要还是以设计素材为主&#xff0c;像图片素材就有上百…...

代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

JAVA代码编写 860.柠檬水找零 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 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图 二分类问题模型通常输出的是一个概率值&#xff0c;我们需要设定一个阈值&#xff…...

java: Internal error in the mapping processor: java.lang.NullPointerException

启动java项目出错&#xff0c;其他人工程没有问题&#xff0c;别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…...

TCP知识点

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;广泛应用于互联网。下面是TCP的一些知识点&#xff1a; TCP是一种可靠的协议&#xff0c;采用三次握手建立连接和四次挥手断开…...

大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)

本期文章&#xff0c;我们将通过三个动手实验从浅到深地解读和演示大语言模型&#xff08;LLMs&#xff09;&#xff0c;如何结合 Amazon SageMaker 的模型部署、模型编译优化、模型分布式训练等。 实验一&#xff1a;使用 Amazon SageMaker 构建基于开源 GPT-J 模型的对话机器…...

顶级数据恢复工具—— 最全的15个数据恢复软件榜单

在这个信息为王的数字时代&#xff0c;关键数据的丢失对个人和企业来说都可能是灾难性的。无论是由于意外删除、硬件故障还是恶意攻击&#xff0c;拥有强大的数据恢复解决方案都是至关重要的。在本综合指南中&#xff0c;我们将探索市场上最好的数据恢复软件&#xff0c;包括顶…...

【图像分类】【深度学习】【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 安装 源里面自带了这个软件&#xff0c;可以直接装 sudo apt install deepin-terminal 启动 按下Win键&#xff0c;输入deep即可快速检索出图标&#xff0c;点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0…...

HTTP协议,Web框架回顾

HTTP 请求协议详情 -请求首行---》请求方式&#xff0c;请求地址&#xff0c;请求协议版本 -请求头---》key:value形式 -referer&#xff1a;上一次访问的地址 -user-agenet&#xff1a;客户端类型 -name&#xff1a;lqz -cookie&…...

基于Docker与vLLM的大模型部署实战:从环境搭建到性能调优

1. 环境准备&#xff1a;Docker与GPU基础配置 在开始部署大模型之前&#xff0c;我们需要先搭建好基础环境。我推荐使用Docker来管理环境&#xff0c;因为它能解决依赖冲突问题&#xff0c;还能实现一键部署。不过要注意&#xff0c;如果你的机器没有NVIDIA显卡&#xff0c;后续…...

终极指南:如何免费解锁Cursor Pro高级功能,告别试用限制困扰

终极指南&#xff1a;如何免费解锁Cursor Pro高级功能&#xff0c;告别试用限制困扰 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve…...

Jenkins 学习总结几

先唠两句&#xff1a;参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜&#xff0c;它是菜单&#xff08;资源路径&#xff09;的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

别再手动加电阻了!手把手教你用Xilinx 7系列FPGA的DCI功能搞定高速信号完整性

别再手动加电阻了&#xff01;手把手教你用Xilinx 7系列FPGA的DCI功能搞定高速信号完整性 当你在设计一块高速数据采集卡时&#xff0c;是否曾被密密麻麻的端接电阻搞得焦头烂额&#xff1f;每个LVDS差分对需要两个100Ω电阻&#xff0c;DDR3接口每根数据线又得配一个39Ω电阻.…...

Android AAudio低延迟音频流实战:从独占模式到性能调优

1. AAudio低延迟音频流的核心价值 在移动音频开发领域&#xff0c;延迟是影响用户体验的关键指标。想象一下你正在玩一款音乐游戏&#xff0c;每次敲击屏幕到听到声音反馈的时间如果超过20毫秒&#xff0c;就会明显感觉到操作和声音不同步。这就是AAudio诞生的背景——它专为解…...

GoldHEN Cheats Manager:PS4游戏修改功能的一站式解决方案

GoldHEN Cheats Manager&#xff1a;PS4游戏修改功能的一站式解决方案 【免费下载链接】GoldHEN_Cheat_Manager GoldHEN Cheats Manager 项目地址: https://gitcode.com/gh_mirrors/go/GoldHEN_Cheat_Manager 在PlayStation 4的定制化游戏体验领域&#xff0c;GoldHEN C…...

Phi-4-mini-reasoning 3.8B 轻量模型Python入门实战:零基础快速上手AI推理

Phi-4-mini-reasoning 3.8B 轻量模型Python入门实战&#xff1a;零基础快速上手AI推理 1. 为什么选择Phi-4-mini-reasoning Phi-4-mini-reasoning是一款专为推理任务优化的轻量级大模型&#xff0c;参数规模3.8B&#xff0c;在保持较高推理能力的同时大幅降低了硬件需求。对于…...

手把手教你用LingBot-Depth:普通照片秒变3D场景,新手必看

手把手教你用LingBot-Depth&#xff1a;普通照片秒变3D场景&#xff0c;新手必看 1. 为什么你需要LingBot-Depth&#xff1f; 想象一下&#xff0c;你手机里的普通照片突然变成了可以测量距离、生成3D模型的智能图像——这就是LingBot-Depth能为你带来的魔法。这个AI模型专门…...

RexUniNLU保姆级教程:日志埋点+Prometheus监控+NLU服务性能大盘搭建

RexUniNLU保姆级教程&#xff1a;日志埋点Prometheus监控NLU服务性能大盘搭建 1. 为什么需要监控NLU服务&#xff1f; 当你把RexUniNLU部署到生产环境后&#xff0c;会发现几个现实问题&#xff1a;用户说服务响应时快时慢&#xff0c;但不知道具体慢在哪里&#xff1b;出现识…...

大模型位置编码进化史:从Sinusoidal到RoPE的5个关键突破

大模型位置编码进化史&#xff1a;从Sinusoidal到RoPE的5个关键突破 在自然语言处理领域&#xff0c;位置编码技术如同给模型装上了"空间感知"系统&#xff0c;让原本对序列顺序"视而不见"的Transformer架构获得了理解词序关系的能力。本文将带您深入探索这…...