【面试经典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
写在最后
如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。
如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。
最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。
相关文章:
【面试经典150 | 区间】插入区间
文章目录 Tag题目解读题目来源解题思路方法一:合并区间方法二:模拟 其他语言python3 写在最后 Tag 【模拟】【数组】 题目解读 给定一个含有多个无重叠区间的数组,并且数组已经按照区间开始值升序排序。在列表中插入一个新的区间࿰…...
前端 js 之 浏览器工作原理 和 v8引擎 01
嘿,老哥,来了就别跑 !学完 ,不亏 😂 文章目录 一、输入url 之后做了什么二、简单了解下浏览器内核三、浏览器渲染过程 (渲染引擎)四、js 引擎五、chrome五、v8 引擎原理八、浏览器性能优化九、前…...
全波形反演培训的思考与总结
一. InversionNet 最简单的端到端DL_FWI 1. 网络结构: 图1 构建了一个具有编码器-解码器结构的卷积神经网络,根据地震波动数据模拟地下速度结构。编码器主要由卷积层构建,它从输入地震数据中提取高级特征并将其压缩为单个高维向量。解码器然后…...
Arcgis聚合工具——实现简单的升尺度
找到Aggregate工具 按如下设置进行操作 注意:如有需要对应的低分辨率影像,必须点开右下角环境Environments选项,进行栅格的捕捉选项设置,以防止升尺度后的影像与需对应的低分辨率影像的栅格单元存在偏移。 点击OK,即可…...
专题:链表常考题目汇总
文章目录 反转类型:206.反转链表完整版二刷记录 25. K个一组反转链表1 :子链表左闭右闭反转版本2 : 子链表左闭右开反转版本(推荐)⭐反转链表左闭右闭和左闭右开 合并类型:21.合并两个有序链表1: 递归法2: …...
记一次mysql事务并发优化
记一次mysql事务并发优化 背景 事情的情况大致是这样的。一个扣减库存的业务上线以后,隔几天会报一次错,错误内容如下: ERROR - exception: UncategorizedSQLException,"detail":"org.springframework.jdbc.UncategorizedSQ…...
GEO生信数据挖掘(九)WGCNA分析
第六节,我们使用结核病基因数据,做了一个数据预处理的实操案例。例子中结核类型,包括结核,潜隐进展,对照和潜隐,四个类别。第七节延续上个数据,进行了差异分析。 第八节对差异基因进行富集分析。…...
Python 中,单例模式的5种实现方式(使用模块、使用装饰器、使用类方法、基于new方法实现、基于metaclass方式实现)
单例模式的5种实现方式 1 使用模块 2 使用装饰器 3 使用类方法 4.基于new方法实现 5 基于metaclass方式实现 单例模式的5种实现方式 什么是单例模式? 单例模式是指:保证一个类仅有一个实例,并提供一个访问它的全局访问点# 线程1 执行&#x…...
超低延迟直播技术路线,h265的无奈选择
超低延迟,多窗显示,自适应编解码和渲染,高分辨低码率,还有微信小程序的标配,这些在现今的监控和直播中都成刚需了,中国的音视频技术人面临着困境,核心门户浏览器不掌握在自己手上,老…...
openstack 云主机 linux报 login incorrect
还未输入密码就提示login incorrect 不给输密码位置 完全不给输密码的机会 关机进入单用户 检查登录安全记录 vi /var/log/secure 发现 /usr/lib64/security/pam_unix.so 报错 将正常的机器提取/usr/lib64/security/pam_unix.so 比对MD5一致, 另外判断 libtir…...
Selenium:Web自动化框架
Selenium自动化入门 1、Selenium概述2、Selenium环境搭建3、Selenium基本操作4、网页元素定位5、操作Cookie6、标签页管理 1、Selenium概述 Selenium(Web Browser Automation)的初衷是Web应用自动化测试。Selenium广泛应用于爬虫,爬虫需要让浏…...
Android11 添加adb后门
软件平台:Android11 硬件平台:QCS6125 需求:通过设备的物理组合按键,直接打开adb功能,我们这里确定的是Volume-up、Volume-down、camera三个按键在短时间内各按三次即可触发,具体代码改动如下:…...
福昕阅读器打开pdf文档时显示的标题不是文件名
0 Preface/Foreword 1 现象 文件名为:Demo-20231017 打开效果:显示名字为 word template 2 解决方法 2.1 利用打印方式将word生产pdf 在word生成pdf文件时,使用打印方式生成pdf文档。 2.2 删除word文档设置的标题 文件---》信息---》标…...
Python自创项目—《数字帝国》更新日志
Inscode项目地址:https://inscode.csdn.net/2302_76241188/lxzn 或者点这里访问 更新时间:2023-10-04 更新内容:新增加四个地区 附:预计下次更新将会增加几个新的地区,修复一些已知bug...
【STM32】---存储器,电源核时钟体系
一、STM32的存储器映像 1 文中的缩写 2 系统构架(原理图) 3. 存储器映像 (1)STM32是32位CPU,数据总线是32位的 (2)STM232的地址总线是32位的。(其实地址总线是32位不是由数据总线是…...
Flink中的时间和窗口操作
1.窗口概念 在大多数场景下,我们需要统计的数据流都是无界的,因此我们无法等待整个数据流终止后才进行统计。通常情况下,我们只需要对某个时间范围或者数量范围内的数据进行统计分析:如每隔五分钟统计一次过去一小时内所有商品的点击量;或者每发生1000次点击后,都去统计一…...
【算法|前缀和系列No.5】leetcode1314. 矩阵区域和
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【Leetcode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...
python知识:从PDF 提取文本
一、说明 PDF 到文本提取是自然语言处理和数据分析中的一项基本任务,它允许研究人员和数据分析师从 PDF 文件中包含的非结构化文本数据中获得见解。Python 是一种通用且广泛使用的编程语言,它提供了多个库和工具来促进提取过程。 二、各种PDF操作库 让我…...
基于MATLAB的GPS卫星绕地运行轨迹动态模拟仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 Prn NavData(PRNS_SEL,1);%识别导航数据中的PRNiode NavData(PRNS_SEL,11);%企…...
TCP/IP模型五层协议
TCP/IP模型五层协议 认识协议 约定双方进行的一种约定 协议分层 降低了学习和维护的成本(封装)灵活的针对这里的某一层协议进行替换 四/五层协议 五层协议的作用 应用层 应用层常见协议 应用层常见协议概览 基于TCP的协议 HTTP(超…...
梯度下降算法及其变体:从原理到实践
1. 梯度下降算法概述梯度下降是机器学习中最核心的优化算法之一,特别是在深度学习领域。这个算法的本质思想非常简单:通过不断调整模型参数,使得模型的预测误差沿着梯度方向逐渐减小。想象你站在山顶蒙着眼睛要下山,每次用脚试探周…...
python click
# Python Click 库:命令行的另一种写法 他是什么 这段时间在折腾一些内部工具,发现个有意思的玩意儿——Click。说起来挺巧,之前写命令行工具一直用argparse,直到某天改一个别人写的脚本,看到() 这种装饰器写法&…...
量子Kerr非线性谐振器在机器学习核方法中的应用
1. 量子Kerr非线性声学谐振器与机器学习融合概述量子计算与机器学习的交叉领域近年来展现出令人振奋的发展前景。作为一名长期跟踪量子计算硬件发展的研究者,我特别关注到量子Kerr非线性器件在机器学习核方法中的应用潜力。传统机器学习在处理高维数据时面临计算复杂…...
PyAEDT终极指南:如何用Python自动化你的Ansys电磁仿真工作流?
PyAEDT终极指南:如何用Python自动化你的Ansys电磁仿真工作流? 【免费下载链接】pyaedt AEDT Python Client Package 项目地址: https://gitcode.com/gh_mirrors/py/pyaedt 你是否厌倦了在Ansys Electronics Desktop中重复点击鼠标、手动设置参数、…...
SpringBoot配置文件加密进阶:手把手教你自定义Jasypt加密算法和前缀后缀(告别默认ENC)
SpringBoot配置文件加密进阶:手把手教你自定义Jasypt加密算法和前缀后缀(告别默认ENC) 在企业级应用开发中,配置文件的安全性往往被忽视,尤其是数据库连接信息、API密钥等敏感数据。虽然Jasypt提供了开箱即用的ENC()加…...
老王-与辉同行:直播带货进入“人心时代”的里程碑
与辉同行:直播带货进入“人心时代”的里程碑“流量留不住人心,人心自有真情相伴。”一、数据背后的时代转折 首秀战绩(2023年12月9日后一个月): 3小时涨粉300万 → 平均每分钟1.6万人销售额1.5亿元点赞量12.9亿峰值在线…...
SpringBoot项目从Tomcat迁移到东方通TongWeb7的保姆级避坑指南(含达梦数据库适配)
SpringBoot项目从Tomcat迁移到东方通TongWeb7的完整实战手册(含达梦数据库适配) 在国产化技术栈替代浪潮中,中间件迁移是每个Java开发者必须掌握的技能。最近带队完成了基于若依框架的SpringBoot系统从Tomcat到TongWeb7的完整迁移,…...
RC确实是每次查询都生成读视图,但是都是快照读啊,和读已提交没半毛钱关系吧
文章目录1. 语义纠偏:快照并不等于“旧照片”2. 举个例子:刷新朋友圈3. 为什么它和“读已提交”没脱节?4. 总结💡 追问一个硬核点哈哈,我特别喜欢你这种钻研精神!你这个质疑点其实踩到了很多开发者对“快照…...
CREST构象搜索工具深度解析:从算法原理到高性能计算实践
CREST构象搜索工具深度解析:从算法原理到高性能计算实践 【免费下载链接】crest CREST - A program for the automated exploration of low-energy molecular chemical space. 项目地址: https://gitcode.com/gh_mirrors/crest/crest CREST(Confo…...
Pandas数据清洗与优化实战技巧
1. 数据按摩的艺术:Pandas实战指南刚接触数据分析时,我总把数据想象成一块未经雕琢的大理石——原始、粗糙但充满可能。而Pandas就是我的雕刻刀,通过一系列"数据按摩"技巧,把杂乱无章的原始数据变成结构清晰的宝藏。今天…...
