当前位置: 首页 > news >正文

[Java恶补day14] 56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:
输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:
1 <= intervals.length <= 10 4 10^4 104
intervals[i].length == 2
0 <= starti <= endi <= 10 4 10^4 104


知识点:
数组、排序


解:
因为需要合并若干个区间,因此对左端点进行升序排序,使用到lambda表达式

对于每个区间,左端点表示这个区间的起始下标,右端点表示这个区间的结束下标

定义一个列表,存储结果,列表的每个元素都是一个int类型的一维数组。

对于intervals的每个元素(即:每一行),按照以下步骤进行:
①获取当前结果列表res的大小
②若当前结果列表res没有元素,表示我们直接原始数组的第一行加入这个结果列表res
③若当前结果列表res有元素,且最后一个元素的右端点≥当前遍历的元素的左端点,如:[1, 3]与[2, 5],表明需要合并区间。因为这个区间已经在结果列表res中,我们做的就是替换这个区间在res的相应左端点:获取更大的结束下标。对于这个例子而言,最大的结束下标是5,也就是p[1],因此让结果列表res中的最后一个元素的右端点更新为这个5。若[1, 4]与[2, 3],则最大的结束下标是4,也就是res.get(len-1)[1],因此结果列表res中的最后一个元素的右端点更新为这个4。
④若当前结果列表res有元素,但最后一个元素的右端点<当前遍历的元素的左端点,则表明无法与当前正在处理的结果列表中的最后一个区间进行合并,那就往res新增一个元素。

最后,我们将List列表,通过.toArray()转为数组,返回。

时间复杂度: O ( n l o g n ) O(nlog n) O(nlogn)Arrays.sort()平均耗时 O ( n l o g n ) O(nlog n) O(nlogn)
空间复杂度: O ( 1 ) O(1) O(1)。排序的栈开销和返回值不计入

class Solution {public int[][] merge(int[][] intervals) {List<int[]> res = new ArrayList<>(); //最后一个元素表示正在合并的区间//原始数据按第一列进行排序Arrays.sort(intervals, (o1, o2) -> (o1[0] - o2[0]));//遍历每一行for (int[] p : intervals) {//获取当前结果列表的大小int len = res.size();//若结果列表有元素,且可合并if (len > 0 && res.get(len - 1)[1] >= p[0]) {//更新右端点最大值res.get(len - 1)[1] = Math.max(res.get(len - 1)[1], p[1]);}//无法合并else {//添加新的合并区间res.add(p);}}//列表转数组并返回return res.toArray(new int[res.size()][]);}
}

参考:
1、灵神解析
2、java二维数组排序

http://www.lqws.cn/news/98821.html

相关文章:

  • SQL 筛选出在表1但不在表2中的数据
  • Express 集成Sequelize+Sqlite3 默认开启WAL 进程间通信 Conf 打包成可执行 exe 文件
  • 【Redis】set 类型
  • qt控制台程序与qt窗口程序在读取数据库中文字段的差异!!巨坑
  • MySQL 如何判断某个表中是否存在某个字段
  • 基于PostGIS的GeoTools执行原生SQL查询制图实践-以贵州省行政区划及地级市驻地为例
  • React从基础入门到高级实战:React 高级主题 - React设计模式:提升代码架构的艺术
  • 结构性设计模式之Composite(组合)
  • Spring AI 项目实战(一):Spring AI 核心模块入门
  • MongoDB数据库学习
  • 宇树科技更名“股份有限公司”深度解析:机器人企业IPO前奏与资本化路径
  • 业态即战场:零售平台的生意模型与系统设计解构
  • EtherCAT背板方案:方芯半导体工业自动化领域的高速、高精度的通信解决方案
  • 定时器时钟来源可以从输入捕获引脚输入
  • RK3568-移植codesys-runtime
  • 【RabbitMQ】- Channel和Delivery Tag机制
  • 『React』组件副作用,useEffect讲解
  • 灵活运用 NextJS 服务端组件与客户端组件
  • Dify:启动 Web 服务的详细指南
  • CSS 平铺+自动换行效果
  • IT运维工具推荐
  • Web前端为什么要打包?Webpack 和 Vite 如何助力现代开发?
  • 统信 UOS 服务器版离线部署 DeepSeek 攻略
  • vue-14(使用 ‘router.push‘ 和 ‘router.replace‘ 进行编程导航)
  • 芒果深度学习检测:开启农业新视界(猫脸码客第230期)
  • CentOS Stream 8 Unit network.service not found
  • 美尔斯通携手北京康复辅具技术中心开展公益活动,科技赋能助力银龄健康管理
  • dvwa5——File Upload
  • 智能氮气柜的发展历程和前景展望
  • 星野录(博客系统)测试报告