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

"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.mzph.cn/news/708910.shtml

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

相关文章

测评ONLYOFFICE 8.0版本:办公利器再升级

测评ONLYOFFICE 8.0版本&#xff1a;办公利器再升级 前言注册使用升级功能速览全新外观设计wordexcelPPTPDF 协作功能强化更强大的功能复杂表单的填写 移动端优化结语 前言 随着科技的不断发展&#xff0c;办公软件在提升用户体验和工作效率方面扮演着越来越重要的角色。作为一…

18V/5A桥式驱动芯片-SS6285L兼容替代RZ7889

SS6285L是一款由工采网代理的率能DC双向马达驱动电路芯片&#xff1b;该芯片采用SOP8封装&#xff0c;符合ROHS规范&#xff0c;引脚框架100%无铅&#xff1b;它适用于玩具等类的电机驱动、自动阀门电机驱动、电磁门锁驱动等应用。 &#xff08;1&#xff09;产品描述&#xff…

二叉树(C/C++)

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

QT Mingw编译ffmpeg源码以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频流时…

LVS+Keepalived高可用群集

一、Keepalived简介 Keepalived 软件起初是专为LVS负载均衡软件设计的&#xff0c;用来管理并监控LVS集群系统中各个服务节点的状态&#xff0c;后来又加入了可以实现高可用的VRRP功能。因此&#xff0c;Keepalived除了能够管理LVS软件外&#xff0c;还可以作为其他服务&…

Vue NextTick工作原理及使用场景

$nextTick的定义及理解&#xff1a; 定义&#xff1a;在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操…

springboot集成quartz定时任务并接入后台管理系统(copy即用)

说明:项目启动后会根据设置的时间进行执行,业务代码根据自己的需求更改,数据库文件在最后(记得清空数据库哦~)这里需要注意的一点就是className字段表示的是下面的对应的DynamicTask的路径如:com.example.demo.quartz.task.DynamicTask,如有多个定时任务copy并更改Dynam…

团结引擎——DotNet Wasm方案

参考&#xff1a;团结引擎 DotNet WebAssembly(Wasm) 介绍 一、当前编译流程 通过IL2CPP将C#转成C/C&#xff1b;通过Emscripen将C/C转成WebAssembly&#xff1b; 二、 当前存在问题 IL2CPP在处理类似泛型、反射结构时&#xff0c;由于缺少运行时信息&#xff0c;必须全量生…

程序员面试技巧分享

目录 前言1 自我介绍的艺术1.1 简明扼要1.2 强调独特之处1.3 项目亮点突显1.4 结合公司文化 2 技术问题回答的技巧2.1 明确问题理解2.2 结构清晰的回答2.3 强调解决问题的方法 3 团队协作经验的展示3.1 共享成功经验&#xff1a;3.2 强调沟通和解决冲突的能力&#xff1a; 结语…

基础!!!吴恩达deeplearning.ai:卷积层

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 回顾——密集层 Dense Layer卷积层 Convolutional Neural Network定义优势具体说明心电图卷积层搭建 到目前为止&#xff0c;你使用的所有神经网络层都是密集层类型&#xff0c;这…

用快代理换Ip爬取boss直聘招聘信息

import requests import random from prettytable import PrettyTable tb PrettyTable() tb.field_names [区域,详情页链接,领导,经营领域,公司名,招聘人数,学历要求,工作经验要求,职位名称,期望薪资,技能要求,福利]headers {"User-Agent":"Mozilla/5.0 (Win…

跳跃游戏Ⅱ

问题 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - …

独立分体式比例阀控制器

比例阀放大器的主要作用是对比例阀进行控制&#xff0c;它产生所需的电信号&#xff0c;并对这些信号进行综合、比较、校正和放大。这样的设备通常包括稳压电源、颤振信号发生器等&#xff0c;以确保比例阀能够准确地响应控制指令。外置模块式的设计使得这种放大器可以方便地与…

windows系统下安装RabbitMQ

一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的操作&#xff0c;选择两者版本时一定要参考版本的兼容性 1.RabbitMQ国内下载地址&#xff0c;因官网下载比较缓慢&#xff0c;还是国内的稍微快些 https://r…

【日常聊聊】程序员的金三银四

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;面试技巧分享 方向二&#xff1a;面试题解析 方向三&#xff1a;公司文化解读 方向四&#xff1a;职业规…

Spring篇----第十四篇

系列文章目录 文章目录 系列文章目录前言一、介绍一下 WebApplicationContext二、什么是 spring?三、使用 Spring 框架的好处是什么?四、Spring 由哪些模块组成?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

android studio Unable to download file ‘xxx‘ in offline mode.

如果网络连接正常&#xff0c;但是报这个错&#xff0c;说明开启了离线模式&#xff0c;关掉就行了。 "toggle offline mode" 意思是切换到离线模式 点击右上角的Gradle&#xff0c;然后关闭倒数第二个图标。

超详细的Python字典讲解

一、概念 1.定义 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。是可变数据类型 字典类型的创建 1.字典的每个键值key>value对用冒号:分隔&#xff0c;每个键值对之间用逗号,分割&#xff0c;整个字典包括在花括号{}中 d {key1:value1,key:value} 2.使…

不是詹姆斯了?皮蓬改口称乔丹是他的GOAT

NBA直播吧-nba直播在线观看免费高清直播录像回放NBA直播吧是一个专业NBA直播在线观看免费直播平台&#xff0c;专业提供nba直播免费高清在线观看中文jrs无插件直播&#xff0c;NBA录像回放&#xff0c;CBA直播&#xff0c;WNBA以及篮球直播&#xff0c;足球直播五大联赛等最新直…

蓝桥杯-常用STL(三)

常用STL &#x1f388;1.映射&#x1f388;2.map的基础使用&#x1f52d;2.1引入库&#x1f52d;2.2构造一个映射&#x1f52d;2.3插入一对映射&#x1f52d;2.4判断关键字是否存在&#x1f52d;2.5遍历映射&#x1f52d;2.6清空 &#x1f388;1.映射 &#x1f50e;映射是指两个…