【面试经典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(超…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
