面试经典150题——插入区间

news2025/2/26 11:36:08

"The future belongs to those who believe in the beauty of their dreams." - Eleanor Roosevelt

silhouette of man standing on rock while looking in sky

1. 题目描述

image-20240229091820243

2.  题目分析与解析

2.1 思路一

解决这个问题的思路是基于区间排序和合并的经典算法。这个问题的关键在于如何处理新区间与现有区间的关系,尤其是重叠部分。

  1. 区间排序

    • 因为题目中提到了区间列表intervals已经根据每个区间的起始位置进行排序。这是解题的前提,因为如果区间没有排序,我们无法直接进行合并操作,因为合并需要比较相邻区间的位置。

  2. 检查无重叠区间

    • 当前区间在新区间之前结束:如果intervals[i][1] < newInterval[0],那么当前区间与新区间无重叠,并且因为区间列表是有序的,当前区间是所有可能与新区间无重叠并且在其之前的最后一个区间。所以可以直接将当前区间添加到结果列表中。

    • 当前区间在新区间之后开始:如果intervals[i][0] > newInterval[1],那么当前区间与新区间无重叠,并且是第一个完全在新区间之后开始的区间。在这种情况下,我们应该将新区间添加到结果列表中,因为我们知道新区间不会与任何后续的区间重叠。

    • 我们首先检查新区间newInterval是否与当前遍历到的区间完全不重叠。这有两种情况:

      如果完全不重叠,那么对于以上的情况我们就直接可以加入结果集。

  3. 合并重叠区间

    • 起始位置:取当前区间的起始位置和新区间起始位置之间的较小值作为合并后的新区间起始位置。

    • 结束位置:取当前区间的结束位置和新区间结束位置之间的较大值作为合并后的新区间结束位置。

    • 当前区间如果与新区间有重叠,我们需要合并它们。合并的方式是更新新区间的起始和结束位置:

  4. 处理所有区间

    • 继续上述过程直到所有区间都被处理。这意味着要么所有的区间都添加到结果列表中,要么被合并到新区间中。

  5. 添加剩余的新区间

    • 遍历结束后,如果新区间还没有被添加到结果列表中,那么意味着新区间应该被添加到所有区间的末尾。

  6. 返回结果

    • 最后,将存储结果的列表转换为数组形式并返回。

整个解题思路的核心是逐步构建最终的区间列表,这通过判断新区间与当前区间之间的位置关系来实现。如果区间不重叠,它们就可以被独立添加到结果列表中;如果它们重叠,就需要合并。所以根据以上内容,我们可以写出如下代码思路

  1. 创建一个新的列表(或数组),用于存放最终的区间列表。

  2. 遍历原始区间列表,对于每个区间:

    • 如果当前区间的结束小于新区间的开始,说明没有重叠,将当前区间添加到新列表中。

    • 如果当前区间的开始大于新区间的结束,说明后面的区间也不会重叠,将新区间添加到新列表中,并将剩下的原始区间全部添加到新列表中,然后跳出循环。

    • 如果以上两种情况都不满足,说明有重叠,此时应该合并区间。将新区间的开始更新为当前区间的开始和新区间开始中的较小者,新区间的结束更新为当前区间的结束和新区间结束中的较大者。

  3. 如果遍历完所有原始区间后,新区间还未被添加到列表中,则将其添加到列表的末尾。

3. 代码实现

3.1 思路一

image-20240229145120091

image-20240229145101988

4. 相关复杂度分析

时间复杂度分析

  1. 遍历区间列表的时间复杂度为O(n),其中n是区间列表的长度。

  2. 在遍历过程中,对于每个区间,都需要进行一些判断和更新操作,这些操作的时间复杂度都是O(1)。

  3. 因此,整体时间复杂度为O(n)。

空间复杂度分析

  1. 创建了一个新的ArrayList用于存放最终的区间列表,所以空间复杂度为O(n)。

  2. 遍历过程中没有使用额外的空间,只是对原有的区间列表和新区间进行操作,所以额外的空间复杂度为O(1)。

  3. 因此,整体空间复杂度为O(n)。

  4. 除了存储返回答案的空间以外,我们只需要额外的常数空间即可。因此开始为O(1)

综上所述,该方法的时间复杂度为O(n),空间复杂度也为O(1)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++入门】C++关键字 | 命名空间 | C++的输入输出

目录 0.C与C 1.C的关键字 2.命名空间 2.1域 2.2C中命名冲突问题 2.3命名空间定义 2.4命名空间使用 2.5命令空间的展开&头文件的展开 3.C的输入&输出 3.1cout&cin 3.1<<流插入运算符 3.2>>流提取运算符 0.C与C C是在C的基础之上&#xff…

九州金榜|家庭教育中孩子厌学的原因有哪些?

孩子的成长往往会受到家庭教育&#xff0c;社会环境&#xff0c;学校教育等因素影响&#xff0c;孩子厌学受家庭教育影响是一个重要因素&#xff0c;都是哪些因素会让孩子产生厌学情绪呢&#xff1f;下面九州金榜家庭教育分析一下因为家庭教育因素而让孩子产生厌学的原因&#…

Redis学习------实战篇----2024/02/28

1.集群的session共享问题 2.基于Redis实现共享session登录 //4.保存验证码到redisstringRedisTemplate.opsForValue().set(LOGIN_CODE_KEYphone,code,LOGIN_CODE_TTL, TimeUnit.MINUTES);RedisTemplate RedisTemplate使用的是JdkSerializationRedisSerializer存入数据&#xff…

不看后悔的2024年腾讯云服务器购买优惠活动汇总

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

二叉树(C/C++)

本篇将较为详细的介绍二叉树的相关知识&#xff0c;以及二叉树的实现。对于二叉树的相关知识&#xff0c;本篇介绍了其概念、特殊的二叉树、性质还有存储结构。 接着对于实现二叉树的每个函数都有其思路讲解&#xff0c;主要的函数分为&#xff1a;遍历&#xff1a;前中后序遍历…

redis-Redis主从,哨兵和集群模式

一&#xff0c;Redis的主从复制 ​ 主机数据更新后根据配置和策略&#xff0c; 自动同步到备机的master/slaver机制&#xff0c;Master以写为主&#xff0c;Slave以读为主。这样做的好处是读写分离&#xff0c;性能扩展&#xff0c;容灾快速恢复。 1.1 环境搭建 如果你的redi…

【HDFS】Decommision(退役) EC数据节点剩最后几个块卡住的问题

一、背景 近期操作退役EC集群的节点。在退役的过程中,遇到了一些问题。特此总结一下。 本文描述的问题现象是: 每一批次退役10个节点,完全退役成功后开始操作下一批。 但是,中间有一批次有2台节点的Under Replicated Blocks一直是1,不往下降。 处于Decommissioning状态卡…

iOS App冷启动优化:Before Main阶段

iOS应用冷启动时&#xff0c;在 UIApplicationMain(argc, argv, nil, appDelegateClassName)方法执行前&#xff0c;主要经历以下阶段&#xff1a; 1. 执行exec&#xff08;&#xff09;启动应用程序进程 2. 加载可执行文件&#xff0c;即将应用程序的Mach-O文件加载到内存…

跟着野火学FreeRTOS:第二段(堆存储管理)

F r e e R T O S FreeRTOS FreeRTOS从版本 V 9.0.0 V9.0.0 V9.0.0开始&#xff0c;内核对象所用的存储空间可以在编译时静态分配或在运行时动态分配&#xff0c;早期的版本不同时支持静态分配和动态分配&#xff0c;这里讲到的堆存储管理是和动态分配相关的。从版本 V 9.0.0 V9…

跨区域复制建筑UI输入框脚本迷你世界

--复制区域文件 --设置坐标起点&#xff0c;终点 --创建区域 --获取坐标id,data --星空露珠工作室制作 local pos1{x-16,y7,z28} local pos2{x28,y44,z-9} local block{num0} local str{} local str0{} local num0 local count0 local ui6 --几个输入框 local romath.random(…

【LeetCode:108. 将有序数组转换为二叉搜索树 + 二叉树+递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Vue3+springboot实现简单登录demo

Vue3从0搭建脚手架步骤【默认已安装node.js】 前置条件&#xff1a;默认已安装node.js、yarn 第一步&#xff1a;创建项目 选择任意一个空白文件夹如下&#xff1a; cmd进入该文件夹下的命令窗口模式&#xff0c;然后输入指令创建vue项目&#xff1a;vue create my-project …

Maya笔记 大纲视图、父子级、打组

文章目录 大纲视图打开大纲视图双层大纲视图 父子级快捷键大纲视图 组菜单操作快捷键操作 大纲视图 打开大纲视图 双层大纲视图 鼠标放到大纲视图最下边的…上&#xff0c;鼠标变成拖动&#xff0c;向上拖&#xff0c;可以拖出两个大纲视图&#xff0c;方便我们同时操作两个物…

[JavaWeb玩耍日记]HTML与CSS快速使用

目录 一.标签 二.指定css 三.css选择器 四.超链接 五.视频与排版 六.布局测试 七.布局居中 八.表格 九.表单 十.表单项 实验项目目录&#xff1a; 必要文件new.css: h1 {color:black; } span{color: #968D92;; } a {color: #000;text-decoration: none; } p {text-i…

水合三氯化铱(三氯化铱水合物)行业技术壁垒较高 应用范围有望扩展

水合三氯化铱&#xff08;三氯化铱水合物&#xff09;行业技术壁垒较高 应用范围有望扩展 水合三氯化铱又称三氯化铱水合物&#xff0c;分子式为IrCl33H2O&#xff0c;是一种无机化合物。水合三氯化铱外观呈绿色结晶或褐色粉末&#xff0c;可溶于水、丙酮和盐酸&#xff0c;难溶…

学习阶段单片机买esp32还是stm32?

学习阶段单片机买esp32还是stm32? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xf…

Altair® HyperWorks® 2023 卓越的开放式仿真和设计平台

Altair HyperWorks 2023 卓越的开放式仿真和设计平台 全新的 Altair HyperWorks 2023 软件版本现已发布&#xff01;Altair HyperWorks 2023 是一个开放式仿真和设计平台&#xff0c;功能更强大、用途更广泛&#xff0c;将为工程师提供适用于各行业的全面 CAE 软件套件。通过运…

【appium】Hybrid应用自动化|微信小程序自动化

目录 一、Hybrid&#xff08;nativewebview&#xff09;应用自动化 1、webview 2、Hybrid应用自动化实现 2.1准备工作 Step1&#xff1a;准备android 4.4版本以上的手机/模拟器 Step2&#xff1a;在app源码中将webview调试模式打开 Step3&#xff1a;安装UC开发者工具 U…

Sui主网升级至V1.19.1版本

其他升级要点如下所示&#xff1a; #16190, #16193 现在CLI正确处理并修复了交易没有输入或命令时的输出表格。例如&#xff0c;调用 client call — package 0x2 — module kiosk — function default 现在具有正确格式的输出。 #15928 Move编译器的一系列变更 添加了宏函…

Redis持久化的两种方式RDB和AOF详解

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 以下内容为学习 Redis 过程中的笔记 文章目录 Redis持久化RDB&#xff08; Redis DataBase &#xff09;触发机制&#xff1a;如何恢复rbd文件&#xff1a;优点&#xff1a;缺点&#xff1a; AOF &…