面试经典150题——合并区间

​"Do not wait to strike till the iron is hot; but make it hot by striking." - William Butler Yeats

gray wooden dock in sea near trees at daytime

1. 题目描述

image-20240228092508784

2.  题目分析与解析

2.1 思路一

还是先来分析题目,观察一下重叠的区间和不重叠的区间数组之间的关系是什么:

比如区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6],我们很容易发现第一个区间 [1,3] 的尾部和第二个区间 [2,6]的头部应该是前者更大或者相等的关系(如区间 [1,4] 和 [4,5] 可被视为重叠区间)。

所以我们是不是就可以两两遍历区间,对比前一个区间的尾部和后一个区间的头的大小关系,从而达到合并区间的目的。但是我们需要注意一下:题目并没有告诉我们区间都是像下面这样:

image-20240228093439341

按照所有的区间头是有序排列的(1<2<8<15)。因为只有有序的前提下才能按照上述方式求解,比如对于下面的 intervals头部元素无序排列:

image-20240228093925089

这时如果再按照上诉思路求解,那么再索引 0,1进行比较时会出现形成区间 [2,3]的情况。

所以我们的代码思路如下:

  1. 对intervals按照每一个区间的头部元素进行从小到大排序

  2. 遍历每一个区间,查看当前区间尾与下一个区间头的大小

    • 如果前者大于等于后者,就需要合并区间,并将合并后的结果加入结果集

    • 如果前小于后者,那么就不需要合并区间,将前一个区间加入结果集(因为当前区间可能和后一个区间合并)

  3. 返回结果集

注意1:对于合并的情况,并不一定是两两合并,还可能多个区间合并,就比如下面的情况:

第一次合并:

image-20240228110213677

第二次合并:

image-20240228110242540

第三次合并:

image-20240228110253742

所以合并的结果可能和下一个区间合并,这一点要在代码中体现出来。

注意2:对于最后一个元素的处理,因为我们是比较的当前区间和下一个区间,所以要防止数组越界,就需要对最后一个区间分为两种情况处理:

  • 如果倒数第二个区间能够将最后一个区间合并,那么就会在合并部分的while循环中i等于intervals.length-1时就可以结束遍历了

  • 如果倒数第二个区间不能将最后一个区间合并,那么就会在i等于intervals.length-1时把最后一个区间加入结果集结束遍历

3. 代码实现

image-20240228104926055

image-20240228104907856

4. 相关复杂度分析

时间复杂度
  1. 排序:首先,对区间数组intervals进行排序,时间复杂度为O(n log n),其中nintervals的长度。

  2. 遍历并合并区间:之后,通过一次遍历来合并区间,时间复杂度为O(n)

因此,merge方法的总体时间复杂度主要由排序步骤决定,为O(n log n)

空间复杂度
  • 结果存储:使用了一个ArrayList来存储合并后的区间,其大小最多与输入数组intervals的大小相等。因此,空间复杂度为O(n)

  • 排序:排序算法可能需要额外空间,例如在Java中,Arrays.sort()对于对象数组使用的是TimSort算法,其空间复杂度为O(n)。因此,考虑到排序的空间需求,总体空间复杂度仍为O(n)

总结

时间复杂度为O(n log n),空间复杂度为O(n)

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

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

相关文章

Mendix 开发实践指南|Mendix的核心概念

在当今快速变化的技术环境中&#xff0c;Mendix平台以模型驱动开发方法&#xff0c;重新定义了应用程序的构建过程。本章内容&#xff0c;将深入探讨Mendix的几大核心概念&#xff1a;模型驱动开发、微流、纳流 、 实体模型和页面&#xff0c;旨在帮助我们全面理解Mendix平台的…

Windows虚拟主机如何开启网页debug模式

前不久&#xff0c;有客户咨询想要知道如何开启网页debug模式,以便后期他网站出现异常可以自行排查。这边了解到他当前使用的是Hostease 的Windows 虚拟主机&#xff0c;而开启网页debug模式的操作步骤如下&#xff1a; 1.Hostease的Windows虚拟主机都是带Plesk面板的,因此需要…

本届挑战赛亚军方案:面向微服务架构系统中无标注、多模态运维数据的异常检测、根因定位与可解释性分析

CheerX团队来自于南瑞研究院系统平台研发中心&#xff0c;中心主要从事NUSP电力自动化通用软件平台的关键技术研究与软件研发。 选题分析 图1 研究现状 本次CheerX团队的选题紧密贴合了目前的运维现状。实际运维中存在多种问题导致运维系统的不可用。比如故障发生时&#xff…

C语言:字符函数 字符串函数 内存函数

C语言&#xff1a;字符函数 & 字符串函数 & 内存函数 字符函数字符分类函数字符转换函数tolowertoupper 字符串函数strlenstrcpystrcatstrcmpstrstrstrtok 内存函数memcpymemmovememsetmemcmp 字符函数 顾名思义&#xff0c;字符函数就是作用于字符的函数&#xff0c;…

1.1 编程环境的安装

汇编语言 汇编语言环境部署 第二个运行程序直接双击安装一直下一步即可MASM文件复制到D盘路径下找到dosbox安装路径&#xff1a;C:\Program Files (x86)\DOSBox-0.74找到该文件双击打开它&#xff0c;修改一下窗口大小 把这两行改成如下所示 运行dos&#xff0c;黑框中输入mou…

打造去中心化透明储蓄罐:Solidity智能合约的又一实践

一、案例背景 传统的储蓄罐通常是由个人或家庭使用&#xff0c;用于存放硬币或小额纸币。然而&#xff0c;这样的储蓄罐缺乏透明性&#xff0c;用户无法实时了解储蓄情况&#xff0c;也无法确保资金的安全性。 通过Solidity智能合约&#xff0c;我们可以构建一个去中心化…

园区能耗监测管控平台

园区能耗监测管控平台是一种基于先进科技的能源管理系统&#xff0c;旨在帮助园区实现能源消耗的精准监测和高效管控。这一平台集成了能耗监测、数据分析、远程控制等功能&#xff0c;为园区管理者提供了全方位的能源管理解决方案&#xff0c;助力园区实现节能减排、降低成本的…

vue3使用echarts绘制地图

vue3使用echarts绘制地图 安装echarts npm install echarts下载地图的json数据【我这里是把json数据单独粘出来然后新建了一个文件china.json】 下载中国及各个省份的地图数据引入 import chinaJson from ./china.json绘制地图 <template><div ref"myChart&q…

Windows WMI详解

WMI简介 WMI ( Windows Management Instrumentation, Windows管理规范)是Windows 2000/XP管理系统的核心&#xff0c;属于管理数据和操作的基础模块。设计WMI的初衷是达到一种通用性&#xff0c;通过WM操作系统、应用程序等来管理本地或者远程资源。它支持分布式组件对象模型(…

sora技术报告阅读

sora是一个在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。 需要将所有类型的视觉数据转化为统一表示的方法&#xff0c;使得能够对生成模型进行大规模训练。 Sora是一个通用的视觉数据模型&#xff0c;它可以生成不同持续时间、宽高比和分辨率的视…

打造透明银行存储:Solidity智能合约的实践与探索

引言&#xff1a; 随着区块链技术的快速发展&#xff0c;智能合约作为其中的核心组件&#xff0c;正被越来越多地应用于各种场景。作为智能合约的编程语言&#xff0c;Solidity因其对以太坊平台的深度支持而备受关注。在这篇文章中&#xff0c;我们将通过构建一个透明的银行存储…

webrtc

stun服务 阿里云服务器安全组添加端口开放 webrtc-streamer视屏流服务器搭建 - 简书