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

插入区间[中等]

优质博文:IT-BLOG-CN

一、题目

给你一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]

示例 2:
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间[4,8][3,5],[6,7],[8,10]重叠。

示例 3:
输入:intervals = [], newInterval = [5,7]
输出:[[5,7]]

示例 4:
输入:intervals = [[1,5]], newInterval = [2,3]
输出:[[1,5]]

示例 5:
输入:intervals = [[1,5]], newInterval = [2,7]
输出:[[1,7]]

0 <= intervals.length <= 104
intervals[i].length == 2
0 <= intervals[i][0] <= intervals[i][1] <= 105
intervals根据intervals[i][0]按升序排列
newInterval.length == 2
0 <= newInterval[0] <= newInterval[1] <= 105

二、代码

对于区间S1=[l1,r1]S2=[l2,r2]],如果它们之间没有重叠(没有交集),说明要么S1S2的左侧,此时有r1<l2​;要么S1S2的右侧,此时有l1>r2​。

如果r1<l2l1>r2二者均不满足,说明S1S2必定有交集,它们的交集即为[max⁡(l1,l2),min⁡(r1,r2)]并集即为[min⁡(l1,l2),max⁡(r1,r2)]

模拟: 在给定的区间集合X互不重叠的前提下,当我们需要插入一个新的区间S=[left,right]时,我们只需要:
【1】找出所有与区间S重叠的区间集合X′
【2】将X′中的所有区间连带上区间S合并成一个大区间;
【3】最终的答案即为不与X′重叠的区间以及合并后的大区间;

这样做的正确性在于,给定的区间集合中任意两个区间都是没有交集的,因此所有需要合并的区间,就是所有与区间S重叠的区间。并且,在给定的区间集合已经按照左端点排序的前提下,所有与区间S重叠的区间在数组intervals中下标范围是连续的,因此我们可以对所有的区间进行一次遍历,就可以找到这个连续的下标范围。

当我们遍历到区间[li,ri]时:
【1】如果ri<left,说明[li,ri]S不重叠并且在其左侧,我们可以直接将[li,ri]加入答案;
【2】如果li>right,说明[li,ri]S不重叠并且在其右侧,我们可以直接将[li,ri]加入答案;
【3】如果上面两种情况均不满足,说明[li,ri]S重叠,我们无需将[li,ri]加入答案。此时,我们需要将S[li,ri]合并,即将S更新为其与[li,ri]的并集。

那么我们应当在什么时候将区间S加入答案呢?由于我们需要保证答案也是按照左端点排序的,因此当我们遇到第一个 满足li>right的区间时,说明以后遍历到的区间不会与S重叠,并且它们左端点一定会大于S的左端点。此时我们就可以将S加入答案。特别地,如果不存在这样的区间,我们需要在遍历结束后,将S加入答案。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {int left = newInterval[0];int right = newInterval[1];boolean placed = false;List<int[]> ansList = new ArrayList<int[]>();for (int[] interval : intervals) {if (interval[0] > right) {// 在插入区间的右侧且无交集if (!placed) {ansList.add(new int[]{left, right});placed = true;                    }ansList.add(interval);} else if (interval[1] < left) {// 在插入区间的左侧且无交集ansList.add(interval);} else {// 与插入区间有交集,计算它们的并集left = Math.min(left, interval[0]);right = Math.max(right, interval[1]);}}if (!placed) {ansList.add(new int[]{left, right});}int[][] ans = new int[ansList.size()][2];for (int i = 0; i < ansList.size(); ++i) {ans[i] = ansList.get(i);}return ans;}
}

时间复杂度: O(n),其中n是数组intervals的长度,即给定的区间个数。
空间复杂度: O(1)。除了存储返回答案的空间以外,我们只需要额外的常数空间即可。

相关文章:

插入区间[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个无重叠的 &#xff0c;按照区间起始端点排序的区间列表。在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的话&#xff0c;可以合并区间&#xff09;。 示例 1&#x…...

Android Bitmap 模糊效果实现 (二)

文章目录 Android Bitmap 模糊效果实现 (二)使用 Vukan 模糊使用 RenderEffect 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 模糊效果实现 (二) 本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134656140 最新更新地址 https:/…...

初识Java 18-4 泛型

目录 泛型存在的问题 在泛型中使用基本类型 实现参数化接口 类型转换和警告 无法实现的重载 基类会劫持接口 自限定类型 奇异递归类型 自限定 自限定提供的参数协变性 本笔记参考自&#xff1a; 《On Java 中文版》 泛型存在的问题 接下来讨论的&#xff0c;是在泛型…...

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍&#xff1b; 1. 低成本&#xff1a;用户通过手机APP下单&#xff0c;省去了中介费用&#xff0c;降低了雇主的雇佣成本。 2. 高收入&#xff1a;家政服务人员通过手机APP接单&#xff0c;省去了中介费用&#xff0c;从而提高了服务人员的…...

【JavaEE初阶】 HTTP响应报文

文章目录 &#x1f332;序言&#x1f38d;200 OK&#x1f340;404 Not Found&#x1f384;403 Forbidden&#x1f334;405 Method Not Allowed&#x1f38b;500 Internal Server Error&#x1f333;504 Gateway Timeout&#x1f332;302 Move temporarily&#x1f38d;301 Move…...

PTA: 螺旋矩阵

题目 所谓“螺旋矩阵”&#xff0c;是指对任意给定的N&#xff0c;将1到NN的数字从左上角第1个格子开始&#xff0c;按顺时针螺旋方向顺序填入NN的方阵里。本题要求构造这样的螺旋方阵。 格式 输入格式: 输入在一行中给出一个正整数N&#xff08;<10&#xff09;。 输出…...

SparkSQL远程调试(IDEA)

启动Intellij IDEA&#xff0c;打开spark源码项目&#xff0c;配置远程调试 Run->Edit Configuration 启动远程spark-sql spark-sql --verbose --driver-java-options "-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address5005"运行远程调试&#xf…...

Vue2 Vue3 响应式实现原理

Vue2 和 Vue3 的响应式实现原理有所不同。 Vue2 响应式实现原理&#xff1a; Vue2 使用 Object.defineProperty() 方法来实现数据劫持&#xff0c;从而实现数据的响应式更新。具体步骤如下&#xff1a; 首先&#xff0c;在初始化阶段&#xff0c;遍历 data 对象的所有属性&a…...

Android Tombstone 与Debuggerd 原理浅谈

一、前言 Android系统类问题主要有stability、performance、power、security。tombstoned是android平台的一个守护进程&#xff0c;它注册成3个socket服务端&#xff0c;客户端封装在crash_dump和debuggerd_client。 crash_dump用于跟踪定位C crash&#xff0c; debuggerd_cli…...

Matlab 三维电力线重建

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前曾经讨论过关于悬链线方程的曲线拟合点云最小二乘法拟合曲线,在这篇博客中其实拟合的是悬链线的一种近似形式,但对于大多数情况下已经够用了。方程如下所示: z = A ( x 2 + y 2 ) +...

GoLang Filepath.Walk遍历优化

原生标准库在文件量过大时效率和内存均表现不好 1400万文件遍历Filepath.Walk 1400万文件重写直接调用windows api并处理细节 结论 1400万文件遍历时对比 对比条目filepath.walkwindows api并触发黑科技运行时间710秒22秒内存占用480M38M 关键代码 //超级快的文件遍历 fun…...

Java面向对象第7天

精华笔记&#xff1a; 成员内部类&#xff1a;了解&#xff0c;应用率不高 类中套类&#xff0c;外面的称为外部类&#xff0c;里面的称为内部类 内部类只服务于外部类&#xff0c;对外不具备可见性 内部类对象通常在外部类中创建 内部类中可以直接访问外部类的成员(包括私有…...

网络安全如何自学?

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…...

Flink-时间窗口

在流数据处理应用中&#xff0c;一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”&#xff0c;一 般就是划定的一段时间范围&#xff0c;也就是“时间窗”&#xff1b;对在这范围内的数据进行处理&#xff0c;就是所谓的 窗口计算。所以窗口和时间往往是分不开的。 时…...

软件设计模式原则(三)单一职责原则

单一职责原则&#xff08;SRP&#xff09;又称单一功能原则。它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变&#xff0c;那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原…...

使用Postman创建Mock Server

这篇文章将教会大家如何利用 Postman&#xff0c;通过 Mock 的方式测试我们的 API。 什么是 Mock Mock 是一项特殊的测试技巧&#xff0c;可以在没有依赖项的情况下进行单元测试。通常情况下&#xff0c;Mock 与其他方法的主要区别就是&#xff0c;用于取代代码依赖项的模拟对…...

【古月居《ros入门21讲》学习笔记】15_ROS中的坐标系管理系统

目录 说明&#xff1a; 1. 机器人中的坐标变换 tf功能包能干什么&#xff1f; tf坐标变换如何实现 2. 小海龟跟随实验 安装 ros-melodic-turtle-tf 实验命令 运行效果 说明&#xff1a; 1. 本系列学习笔记基于B站&#xff1a;古月居《ROS入门21讲》课程&#xff0c;且使…...

初始linux:文件操作

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 linux的理念 一、echo echo "字符串" 二、输出重定向 > > [文件] echo "字符串" > [文件] echo "字符串" > > [文件] 制作大文件 三、< 输入重定向与ca…...

iOS上传ipa使用可视化工具Transporter

文章目录 前言一、Transporter二、Appuploader三、iTMSTransporter总结 前言 最近为了让非开发人员上传IPA文件&#xff0c;特意找了一些方法&#xff0c;至于以前的ApplicationUploader已经不能用了&#xff0c;下面介绍两个工具可以上传IPA包。 一、Transporter 1、操作简单…...

解读《陆奇最新演讲实录—我的大模型世界观》

腾讯科技频道记者张小珺一篇《陆奇最新演讲实录—我的大模型世界观》刷爆朋友圈。文章知识点丰富、字里行间处处流淌着创业方法论和AI应用商机&#xff0c;含金量极高&#xff01; PS&#xff1a;一家之言、不求苟同。如有不爽之处&#xff0c;欢迎来 找我。 腾讯新闻原文&am…...

从零学NLP:自然语言处理完整学习路线

从零学NLP&#xff1a;自然语言处理完整学习路线 标签&#xff1a;#自然语言处理、#人工智能、#大模型、#大模型实战、#transformer、#机器学习、#深度学习 自然语言处理行业价值、核心应用场景 2026年&#xff0c;自然语言处理&#xff08;NLP&#xff09;已是AI最普适的技术&…...

VSG阻抗扫描实战:从建模仿真到扫频验证

VSG 扫频法 阻抗扫描 阻抗建模验证 正负序阻抗 持续 更新 迭代 新能源 变流器 逆变器 虚拟同步控制 VSG 复现 基于序阻抗的虚拟同步机同步频率谐振现象 可设置扫描范围、扫描点数 程序附带注释&#xff0c;每一行都能看懂 包括 vsg仿真模型&#xff0c;阻抗建模程序&#xff0…...

Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统

Claude Code 最佳实践:构建可验证、可治理、可扩展的生产级分布式系统 在很多团队的第一印象里,Claude Code 只是“更强一点的命令行编码助手”。但一旦进入中大型研发场景,你很快会发现,真正决定它价值上限的,不是单次补全能力,而是它是否能够被纳入一套可验证、可治理…...

RBush高级技巧:批量插入与自定义数据格式的最佳实践

RBush高级技巧&#xff1a;批量插入与自定义数据格式的最佳实践 【免费下载链接】rbush RBush — a high-performance JavaScript R-tree-based 2D spatial index for points and rectangles 项目地址: https://gitcode.com/gh_mirrors/rb/rbush RBush是一款高性能的Jav…...

AI Agent的上下文窗口限制突破技巧

AI Agent的上下文窗口限制突破技巧 关键词:AI Agent, 上下文窗口, 大型语言模型, 记忆管理, 向量数据库, 提示工程, 检索增强生成 摘要:随着AI Agent在各个领域的广泛应用,上下文窗口限制已成为制约其能力发展的关键瓶颈。本文将深入探讨AI Agent上下文窗口限制的本质问题,…...

MCGS 基于PLC的风力发电控制系统 带解释的梯形图程序,接线图原理图图纸,io分配

MCGS 基于PLC的风力发电控制系统 带解释的梯形图程序&#xff0c;接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面最近在搞风力发电控制系统&#xff0c;发现MCGS和PLC的组合真是工业自动化领域的黄金搭档。今天就拿个真实项目里的风机控制程序开刀&#xff0c;带大家…...

2026年4月OpenClaw怎么部署?腾讯云零门槛流程:含安装及大模型API、Skill配置

2026年4月OpenClaw怎么部署&#xff1f;腾讯云零门槛流程&#xff1a;含安装及大模型API、Skill配置。OpenClaw&#xff08;原Clawdbot&#xff09;作为2026年主流的AI自动化助理平台&#xff0c;可通过阿里云轻量服务器实现724小时稳定运行&#xff0c;并快速接入钉钉&#xf…...

CS4.0实战:手把手教你搭建Cobalt Strike渗透测试环境(附避坑指南)

CS4.0实战&#xff1a;从零构建企业级红队测试环境的完整指南 当企业安全团队需要模拟真实攻击者的战术时&#xff0c;Cobalt Strike 4.0&#xff08;CS4.0&#xff09;无疑是当前最强大的红队协作平台之一。不同于简单的漏洞扫描工具&#xff0c;CS4.0提供的是完整的攻击生命周…...

5步解锁全球化内容生产:MoneyPrinterTurbo多语言视频创作全指南

5步解锁全球化内容生产&#xff1a;MoneyPrinterTurbo多语言视频创作全指南 【免费下载链接】MoneyPrinterTurbo 利用AI大模型&#xff0c;一键生成高清短视频 Generate short videos with one click using AI LLM. 项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyP…...

NCM文件解密工具:三步解锁网易云音乐加密音频

NCM文件解密工具&#xff1a;三步解锁网易云音乐加密音频 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲无法在其他播放器上播放而烦恼吗&#xff1f;你是否遇到过精心收藏的音乐只能在特定软件中聆听的…...