面试经典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…

[蓝桥杯 2021 省 AB2] 小平方

每日一道算法题之小平方 一、题目描述二、思路三、C代码 一、题目描述 题目来源&#xff1a;洛谷 [蓝桥杯 2021 第二轮省赛 A 组 F 题&#xff08;B 组 G 题&#xff09;] 小平方小蓝发现&#xff0c;对于一个正整数 n 和一个小于 n 的正整数 v&#xff0c;将 v 平方后对 n 取…

二叉树(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;还可以作为其他服务&…

MySQL中LOW_PRIORITY含义和用法

LOW_PRIORITY 是 MySQL 中的一个关键字&#xff0c;它用于在执行某些操作时改变这些操作的优先级。具体来说&#xff0c;当你在一个表上执行 INSERT、UPDATE 或 DELETE 操作时&#xff0c;你可以使用 LOW_PRIORITY 来告诉 MySQL 服务器这个操作的优先级较低。这意味着这个操作将…

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;这…

HarmonyOS | 状态管理(六) | LocalStorage(页面级UI状态存储)

系列文章目录 1.HarmonyOS | 状态管理(一) | State装饰器 2.HarmonyOS | 状态管理(二) | Prop装饰器 3.HarmonyOS | 状态管理(三) | Link装饰器 4.HarmonyOS | 状态管理(四) | Provide和Consume装饰器 5.HarmonyOS | 状态管理(五) | Observed装饰器和ObjectLink装饰器 文章目录…

该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改。

报错原因 在异步的时候&#xff0c;调用了其他异步&#xff0c;导致UI工程线程该变了数据源&#xff0c;所以只需要将线程变为原始的UI线程。 解决方案 await QueuedTask.Run(() > { Application.Current.Dispatcher.Invoke(() >{报错的代码&#xff0c;…

红外测温仪芯片方案开发设计

红外测温仪由光学系统、光电探测器、信号放大器及信号处理、显示输出等部分组成。光学系统汇集其视场内的目标红外辐射能量&#xff0c;视场的大小由测温仪的光学零件以及位置决定。被测物体辐射的红外首先进入测温仪的光学系统&#xff0c;再由光学系统汇聚射入的红外线&#…

【探索AI】十 深度学习如何入门

深度学习概念 深度学习是一种机器学习的方法&#xff0c;通过构建和训练多层神经网络来解决复杂的模式识别和决策任务。以下是与深度学习相关的一些基本概念&#xff1a; 神经网络&#xff1a;神经网络是由大量的人工神经元&#xff08;节点&#xff09;组成的计算模型。它们通…

前端程序员如何使用GPT

前端程序员如何使用GPT GPT自述 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于深度学习的自然语言处理模型&#xff0c;它在近年来取得了非常显著的成果。许多前端程序员也开始尝试使用GPT来提升工作效率和创造力。那么&#xff0c;前端程序员如何…

python学习笔记-内置类型

Python内置类型是Python编程语言中自带的基本数据类型&#xff0c;它们用于存储和处理数据。其中包括数字、序列、映射、类、实例和异常等主要类型。 在这些内置类型中&#xff0c;有一些是可变的&#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 - …