【面试经典150 | 区间】插入区间

文章目录

  • Tag
  • 题目解读
  • 题目来源
  • 解题思路
    • 方法一:合并区间
    • 方法二:模拟
  • 其他语言
    • python3
  • 写在最后

Tag

【模拟】【数组】


题目解读

给定一个含有多个无重叠区间的数组,并且数组已经按照区间开始值升序排序。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。


题目来源

57. 插入区间


解题思路

数据量为 1 0 4 10^4 104,基本上需要时间复杂度为 O ( n ) O(n) O(n) 或者 O ( n l o g n ) O(nlogn) O(nlogn)的解题方法。

方法一:合并区间

newInterval 区间加入到数组 intervals 数组中,再对数组排序,接下来按照 228汇总区间进行解决。

实现代码


复杂度分析

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) n n n 为新的数组intervals长度。

空间复杂度为 O ( 1 ) O(1) O(1)

方法二:模拟

第二种方法就是模拟,遍历 intervals,找到与 newInterval 区间重合的区间,合并重合的区间。需要注意边界的处理!

具体地,记当我们遍历到区间为 [ l i , r i ] [l_i, r_i] [li,ri],区间 newInterval 的左右端点分别为 l e f t left left r i g h t right right

  • 如果 r i < l e f t r_i < left ri<left,说明 [ l i , r i ] [l_i, r_i] [li,ri] 与新区间不重合并且位于新区间的左侧,此时可以直接将区间 [ l i , r i ] [l_i, r_i] [li,ri] 加入答案数组中;
  • 如果 l i > r i g h t l_i > right li>right,说明 [ l i , r i ] [l_i, r_i] [li,ri] 与新区间不重合并且位于新区间的左侧,此时可以直接将区间 [ l i , r i ] [l_i, r_i] [li,ri] 加入答案数组中;
  • 其他情况下说明当前遍历的区间与新区间重合,我们需要进行合并操作,两个区间的合并也就是求交集操作,即两个区间左端点的最小值作为合并后区间的左端点,两个区间右端点的最大值作为合并后区间的右端点。

还有一种情况,新的区间在区间数组中第一个区间的左侧,或者位于最后一个区间的右侧,这时候我们可以在遍历区间数组的时候一并解决。

具体地,需要维护一个 bool 变量 isPlaced 表示需要合并的新数组是否已经放置在了合适的位置,该变量初始化为 false。在遍历数组区间的时候,如果新区间位于当前遍历的区间左侧即 l i > r i g h t l_i > right li>right 的情况:

  • isPlaced = false,则将新区间加入到答案数组中;
  • 将当前遍历的区间加入到答案数组中。

如果遍历完毕区间数组,isPlaced = false,说明新区间位于区间数组最后一个区间的右侧,则直接将新区间加入到答案数组中。

实现代码

class Solution {
public:vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {vector<vector<int>> res;int l = newInterval[0];int r = newInterval[1];bool isPlaced = false;  // 新的区间是否已经安置好for (auto& inter : intervals) {if (inter[0] > r) {if (!isPlaced) {isPlaced = true;res.push_back({l, r});}res.push_back(inter);}else if (inter[1] < l) {res.push_back(inter);}else {l = min(inter[0], l);r = max(inter[1], r);}}if (!isPlaced) {res.push_back({l, r});}return res;}
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为数组intervals的长度。

空间复杂度为: O ( 1 ) O(1) O(1)


其他语言

方法一的其他语言已经在 【面试经典150 | 区间】合并区间 介绍过了,这里只贴出方法二的其他程序语言的解法。

python3

class Solution:def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:left, right = newIntervalisPlaced = Falseres = []for li, ri in intervals:if li > right:if not isPlaced:res.append([left, right])isPlaced = Trueres.append([li, ri])elif ri < left:res.append([li, ri])else:left = min(left, li)right = max(right, ri)if not isPlaced:res.append([left, right])return res

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

【nginx学习笔记】

1.正向代理&#xff1a;代理的是客户端&#xff0c;一般有明确的访问对象 比如&#xff1a;我现在通过v-p-n去访问YouTube&#xff0c;那么就是正向代理。 2.反向代理&#xff1a;代理的是服务器 最常见的就是web中&#xff0c;nginx去代理一群后端的服务器。 3.负载均衡&…

solidworks 2024新功能之-打造更加智能的工作 硕迪科技

SOLIDWORKS 2024 的新增功能 SOLIDWORKS 的每个版本都致力于改进您的工作流程&#xff0c;使您常用的工具尽可能快速高效地运作。此外&#xff0c;SOLIDWORKS 2024 可以通过量身定制的解决方案扩展您的工具集&#xff0c;并使您能够通过 Cloud Services 轻松将您的设计数据连接…

【Linux进行时】进程控制

1.进程创建&#xff1a; 1.1fork函数 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 \#include <unistd.h> pid_t fork(void); 返回值&#xff1a;子进程中返回0&#xff0c;父进程返…

APP开发成本的影响因素

在温州或中国任何地方开发APP的成本取决于多个因素&#xff0c;包括应用的规模、功能、设计、复杂性以及所需的技术和人力资源。以下是一些可能影响APP开发成本的主要因素&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

kvm 不同存储池中卷的复制 virsh vol-create-from 的简单使用

virsh vol-create-from 命令介绍 主要用的就是这四个参数 virsh vol-crate-from --help使用方式 sdbpool : 要复制到的存储池名称 (这个是最终文件粘贴的池) virsh pool-list/opt/vol01.xml &#xff1a; 这个是你将要复制卷的xml // sdcvol1&#xff1a; 复制目标 // 导…

外汇天眼:外汇投资入门必看!做好3件事,任何人都能提高交易胜率

近年来外汇市场愈来愈热络&#xff0c;许多投资人看准世界金融变化的趋势&#xff0c;纷纷开始入场布局&#xff0c;期望把握行情大赚一笔。 如果你之前没有做过外汇交易&#xff0c;建议最好先透过「外汇天眼学院」学习各种相关的知识与技术分析&#xff0c;等到对外汇有一定的…

中国模式识别与计算机视觉大会|多模态模型及图像安全的探索及成果

目录 前言一、多模态模型进展与探索1、GPT-4V (多模态)测试2、LLM时代文档图像处理技术趋势3、LLM时代文档图像技术机会4、MLLM时代文档图像处理技术趋势5、知名文档图像大模型OCR性能分析 二、图像安全1、篡改种类2、系统架构3、文档图像处理开放平台4、AIGC假图鉴别5、图像篡…

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中&#xff0c;视频只是存储在HTTP服务器中作为一个普通的文件&#xff0c;每个文件有有一个特定的URL。当用户要看视频时&#xff0c;客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷&#xff0c;即所有…

Opengauss数据类型强转

Opengauss数据类型强转 解决方法案例 解决方法 使用cast(需要转换的字段 as 转换后的类型) 函数进行强转。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 案例 问题&#xff1a;统计各类图书的平均价格&#xff0c;其中在图书表中price字段为money型…

PDCA循环

PDCA循环 由美国质量管理专家沃特阿曼德休哈特&#xff08;Walter A. Shewhart&#xff09;首先提出的&#xff0c;由戴明采纳、宣传&#xff0c;获得普及&#xff0c;所以又称戴明环。 模型介绍 戴明是一位美国的质量管理大师&#xff0c;却成名于日本。在他的帮助下&#xf…

电源模块测试用例科普:如何调整电压调整率?ATECLOUD-POWER测试系统能否测试?

电压调整率可以控制电压水平&#xff0c;确保设备正常工作&#xff0c;并且可以减少电能浪费&#xff0c;是开关电源测试的其中一个测试项目。那么要如何测试电压调整率呢?测试条件是什么呢? 什么是电压调整率? 电压调整率是指变压器某个绕组的空载电压和指定负载和功率因数…

Javascript 流程控制 笔记/练习

流程控制 if 分支 单分支 if() 中的条件成立则执行 {} 中的语句&#xff0c;否则不执行 <script>if(条件){语句;} </script>双分支 if() 中的条件成立则执行 if 后{} 中的语句&#xff0c;否则执行 else{} 中的语句 <script>if(条件){语句;}else{语句;} <…

C++初阶--C++入门(1)

文章目录 C语言与C命名空间命名空间的定义和使用 C的输入输出缺省参数函数重载引用赋值与引用引用在参数上的使用以及注意事项函数返回值的引用引用与值的时间效率比较常引用 C语言与C 很多初学者都会把这两门语言进行混淆&#xff0c;但其实这是两种不同的语言&#xff0c;C相…

视频批量加水印:保护版权,提升效率

在当今的自媒体时代&#xff0c;视频制作已经成为许多人的一项必备技能。然而&#xff0c;在视频制作过程中&#xff0c;如何为自己的视频添加独特的水印以保护知识产权&#xff0c;常常让许多制作者感到困扰。本文将为你揭示如何通过固乔剪辑助手软件&#xff0c;简单几步批量…

柯桥基础俄语口语|初级俄语学习:用联想法学习字母

初级俄语 用联想法学习字母 开始学习俄语的时候&#xff0c;第一任务就是掌握字母表。今天彼得俄语会帮助大家巧记俄语字母表。为此&#xff0c;小编把所有字母分成三组&#xff1a;与拼音相似的&#xff0c;可以用图片记住的以及可以用汉字记住的。 与拼音相似的字母 俄语有3…

FPGA 图像缩放 1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…

Linux 内核启动分析

Linux 内核启动分析-BugMan-ChinaUnix博客 通过《Linux应用程序elf描述》&#xff0c;我们了解到一个应用程序编译后&#xff0c;最终会按照指定方式进行链接&#xff0c;而我们通过ld --verbose可以查看对应应用的默认链接方式。那么对于Linux内核呢&#xff1f;毫无疑问&…

工程监测仪器振弦传感器信号转换器在桥梁安全监测中的重要性

工程监测仪器振弦传感器信号转换器在桥梁安全监测中的重要性 桥梁是人类社会建设过程中最重要的交通基础设施之一&#xff0c;对于保障人民出行、促进经济发展具有极其重要的作用。由于桥梁结构在长期使用过程中受到环境因素和负荷的影响&#xff0c;会逐渐发生变形和损伤&…

计算未来:微软眼中的人工智能

计算未来 :人工智能及其社会角色&#xff08;The Future Computed. Artificial Intelligence and its role in society &#xff09;这本书于2018年09月由北京大学出版社出版。 书籍的作者是&#xff1a;沈向洋&#xff08;微软全球执行副总裁&#xff09;,&#xff08;美&…

单片机TDL的功能、应用与技术特点 | 百能云芯

在现代电子领域中&#xff0c;单片机&#xff08;Microcontroller&#xff09;是一种至关重要的电子元件&#xff0c;广泛应用于各种应用中。TDL&#xff08;Time Division Multiplexing&#xff0c;时分多路复用&#xff09;是一种数据传输技术&#xff0c;结合单片机的应用&a…