[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.pswp.cn/bicheng/83521.shtml

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

相关文章

DiskGenius专业版v6.0.1.1645:分区管理、数据恢复、备份还原,一应俱全!

各位小伙伴&#xff0c;大家好&#xff01;今天阿灿给大家带来一款超好用的分区工具&#xff0c;DiskGenius专业版。这款工具堪称电脑管理界的“瑞士军刀”&#xff0c;功能强大&#xff0c;现在出了新版本v6.0.1.1645&#xff0c;简繁中文单文件便携版&#xff0c;使用超方便。…

azure web app创建分步指南系列之二

为注册表授权托管标识 你创建的托管标识尚未获得从容器注册表中提取数据的授权。在此步骤中,你将启用授权。 返回容器注册表的管理页面: 在左侧导航菜单中,选择“访问控制 (IAM)”。选择“添加角色分配”。此屏幕截图显示了如何为容器注册表启用添加角色分配。在角色列表中…

STM32 AD单通道与多通道实战指南

文章目录 AD单通道&#xff08;实验&#xff09;有关配置的库函数AD单通道部分主要代码 AD多通道实现多通道采集实现思路探讨单次转换非扫描模式实现AD多通道AD多通道部分代码 学习建议&#xff1a;推荐搭配 江协科技 AD单通道 AD多通道一起食用&#xff01;&#xff01;&#…

沟通频率不合适,如何找到平衡点

在团队协作中&#xff0c;沟通频率过高、信息干扰、节奏错位常常导致效率下降与成员倦怠。PMI研究指出&#xff0c;沟通不当是75%项目延误的根源&#xff0c;其中沟通频率失衡是关键变量之一。要解决这一问题&#xff0c;关键在于设定节奏、分层沟通、制定协议。其中&#xff0…

EC2 实例详解:AWS 的云服务器怎么玩?☁️

弹性计算、灵活计费、全球可用&#xff0c;AWS EC2 全攻略 在 AWS 生态中&#xff0c;有两个核心服务是非常关键的&#xff0c;一个是 S3&#xff08;对象存储&#xff09;&#xff0c;另一个就是我们今天的主角 —— Amazon EC2&#xff08;Elastic Compute Cloud&#xff09…

lvs-keepalived高可用群集

目录 1.Keepalived 概述及安装 1.1 Keepalived 的热备方式 1.2 keepalived的安装与服务控制 &#xff08;1&#xff09;安装keep alived (2)控制 Keepalived 服务DNF 安装 keepalived 后,执行以下命令将keepalived 服务设置为开机启动。 2.使用 Keepalived 实现双机热备 …

车载诊断架构SOVD --- 车辆发现与建连

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

BUUCTF之[ACTF2020 新生赛]BackupFile

打开环境就一句话 找出源文件! 结合题目名字&#xff1a;BackupFile 先用dirsearct扫描网站文件 发现一个index.php.bak ,拼接url下载 打开发现php代码 <?php include_once "flag.php";if(isset($_GET[key])) {$key $_GET[key];if(!is_numeric($key)) {exit…

Rag技术----项目博客(六)

RAG 定义&#xff1a;检索增强生成&#xff08;Retrieval Augmented Generation&#xff09;&#xff0c;简称 RAG&#xff0c;已经成为当前最火热的LLM应用方案。 目的&#xff1a;通过提供相关领域数据库通过问题检索信息&#xff0c;将相关信息合并到Prompt中&#xff0c;…

设计模式——外观设计模式(结构型)

摘要 本文介绍了外观设计模式&#xff0c;它是一种结构型设计模式&#xff0c;通过引入一个外观类来封装复杂子系统的调用细节&#xff0c;对外提供简单统一的接口。文中通过生活类比、关键角色介绍、使用场景分析以及结构说明等方面对这一模式进行了全面阐述&#xff0c;还涉…

LabVIEW磁悬浮轴承传感器故障识别

针对工业高端装备中主动磁悬浮轴承&#xff08;AMB&#xff09;的位移传感器故障检测需求&#xff0c;基于 LabVIEW 平台构建了一套高精度故障识别系统。通过集成品牌硬件与 LabVIEW 的信号处理能力&#xff0c;实现了传感器探头故障的实时监测与精准定位&#xff0c;解决了传统…

集成学习三种框架

集成学习通过组合多个弱学习器构建强学习器&#xff0c;常见框架包括Bagging&#xff08;装袋&#xff09;、Boosting&#xff08;提升&#xff09; 和Stacking&#xff08;堆叠&#xff09; 一、Bagging&#xff08;自助装袋法&#xff09; 核心思想 从原始数据中通过有放回…

PCI DSS培训记录

22日上午: 整体PCI DSS 结构分享VISA分享全球欺诈风险动态 信用卡被偷枚举攻击依然是最为主要的安全威胁之一(枚举验证码),增加3DS验证防护勒索软件和信息泄漏攻击欺诈分子对AI技术的兴趣日益增加,如换脸软件过验证基于NFC技术利用非接交易进行欺诈成为新的攻击手段,如NF…

数据安全中心是什么?如何做好数据安全管理?

目录 一、数据安全中心是什么 &#xff08;一&#xff09;数据安全中心的定义 &#xff08;二&#xff09;数据安全中心的功能 1. 数据分类分级 2. 访问控制 3. 数据加密 4. 安全审计 5. 威胁检测与响应 二、数据安全管理的重要性 三、如何借助数据安全中心做好数据安…

黑马Java面试笔记之 微服务篇(业务)

一. 限流 你们项目中有没有做过限流?怎么做的? 为什么要限流呢? 一是并发的确大(突发流量) 二是防止用户恶意刷接口 限流的实现方式: Tomcat:可以设置最大连接数 可以通过maxThreads设置最大Tomcat连接数,实现限流,但是适用于单体架构 Nginx:漏桶算法网关,令牌桶算法自定…

PostgreSQL的扩展 passwordcheck

PostgreSQL的扩展 passwordcheck passwordcheck 是 PostgreSQL 内置的一个密码复杂度检查扩展&#xff0c;用于强制实施基本的密码策略。 一、扩展概述 功能&#xff1a;在创建或修改用户密码时检查密码复杂度目的&#xff1a;防止使用过于简单的密码适用版本&#xff1a;Po…

Go语言学习-->编译器安装

Go语言学习–&#xff1e;编译器安装 Go采用的是UTF-8编码的文本文件存放源代码&#xff0c;理论上使用任何一款文本编辑器都可以做Go语言开发。这里推荐使用VS Code和Goland。 VS Code是微软开源的编辑器&#xff0c;而Goland是jetbrains出品的付费IDE。我们这里使用VS Code …

基于Android的一周穿搭APP的设计与实现 _springboot+vue

开发语言&#xff1a;Java框架&#xff1a;springboot AndroidJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat12开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.6 系统展示 APP登录 A…

井字棋——ai PK you

挑战人工智能&#xff0c;体验经典井字棋的对决&#xff01;AI 拥有强大的逻辑计算能力&#xff0c;每一步都经过精准推演。你能战胜它吗&#xff1f;还是会被 AI 彻底碾压&#xff1f; 特点&#xff1a; 智能 AI&#xff0c;难度可调 极简界面&#xff0c;快速上手 实时胜负…

关于easyx头文件

一、窗口创建 &#xff08;1&#xff09;几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为&#xff1a;长度&#xff0c;宽度&#xff0c;是否显示黑框&#xff08;无参为不…