LeetCode Hot100刷题——合并区间

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 <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

实现步骤

  1. 检查输入数组是否为空或长度为0,如果是,直接返回空数组。
  2. 否则,对intervals数组进行排序。使用Arrays.sort自定义Comparator。
  3. 创建merged列表,初始时加入第一个区间。
  4. 遍历从第二个区间开始的所有区间。
  5. 获取merged列表的最后一个区间。
  6. 比较当前区间的start和最后一个区间的end。
  7. 如果当前区间的start <= 最后一个区间的end,则合并,更新最后一个区间的end为两者的最大值。
  8. 否则,直接将当前区间加入merged列表。
  9. 最后,将merged列表转换为数组返回。

程序代码

  • 排序区间:首先将所有区间按照起始点进行排序。这样可以确保所有可能重叠的区间都是连续的。
  • 合并重叠区间:遍历排序后的区间,逐个合并重叠的区间。具体来说,维护一个合并后的区间结果列表,如果当前区间与前一个合并后的区间重叠,则合并它们;否则,将当前区间添加到结果列表中。
class Solution {public int[][] merge(int[][] intervals) {// 数组为空(长度为0)if(intervals.length == 0){return new int[0][];}// 按区间的起始点进行排序Arrays.sort(intervals,(a,b) -> Integer.compare(a[0], b[0]));// 结果列表List<int[]> merged = new ArrayList<>();// 初始时加入第一个区间merged.add(intervals[0]);for(int i = 1; i < intervals.length; i++){int[] last = merged.get(merged.size() - 1);int[] current = intervals[i];// 当前区间的起始点小于等于上一个区间的结束点,说明有重叠if(current[0] <= last[1]){// 合并区间,更新结束点为两者较大的那个last[1] = Math.max(last[1],current[1]);} else{// 无重叠,直接添加当前区间merged.add(current);}}return merged.toArray(new int[merged.size()][]);}
}

补充:使用 Lambda 表达式对区间数组按起始点升序排序

在Java中,Arrays.sort()方法的第二个参数可以接收一个Comparator对象,用于定义排序规则。Lambda表达式在这里的作用是简化Comparator的匿名内部类的定义,直接描述两个区间如何比较大小。

Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));

解析:

        Arrays.sort()的作用:对数组intervals进行排序,排序规则由第二个参数(Lambda表达式)决定。

        Lambda表达式 (a,b) -> ...:

                1. a 和 b 是待比较的两个区间(即intervals中的两个元素,类型是int[ ])。

                2. a[0] 和 b[0] 分别表示这两个区间的起始点。

                3. Integer.compare(a[0],b[0])的作用是:比较两个起始点的大小。

        比较逻辑:

                如果 a[0] < b[0],返回负数,表示a应该排在b的前面(升序)。

                如果 a[0] > b[0],返回正数,表示a应该排在b的后面(降序)。

                如果相等,返回0,表示顺序不变。

Lambda表达式与传统写法的对比:

如果不使用Lambda表达式,代码需要定义一个匿名的Comparator:

Arrays.sort(intervals, new Comparator<int[]>() {@Overridepublic int compare(int[] a, int[] b) {return Integer.compare(a[0], b[0]);}
});

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

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

相关文章

《Metasploit框架核心模块解析与安全防护实践》​

目录 ​​一、框架模块化设计与安全验证价值​​ ​​1. 漏洞验证模块&#xff08;Exploit Modules&#xff09;​​ ​​2. 安全评估模块&#xff08;Auxiliary Modules&#xff09;​​ ​​3. 安全响应模块&#xff08;Post-Exploitation&#xff09;​​ ​​4. 载荷安全…

Cribl 中 Parser 扮演着重要的角色 + 例子

先看文档: Parser | Cribl Docs Parser The Parser Function can be used to extract fields out of events or reserialize (rewrite) events with a subset of fields. Reserialization will preserve the format of the events. For example, if an event contains comma…

程序设计实践--排序(1)

&#xff11;、插入排序&#xff08;一个数组&#xff09; #include<bits/stdc.h> using namespace std; const int N1e35; int a[N]; int n; int main(){cin>>n;for(int i1;i<n;i){cin>>a[i];}for(int i1;i<n;i){int va[i];int ji-1;while(j>1&am…

MAC电脑中右键后复制和拷贝的区别

在Mac电脑中&#xff0c;右键菜单中的“复制”和“拷贝”操作在功能上有所不同&#xff1a; 复制 功能&#xff1a;在选定的位置创建一个与原始文件相同的副本。快捷键&#xff1a;CommandD用于在当前位置快速复制文件&#xff0c;CommandC用于将内容复制到剪贴板。效果&…

新能源汽车焊接智能节气阀

在新能源汽车产业迅猛发展的浪潮中&#xff0c;制造工艺的优劣直接关系到车辆的性能、安全与市场竞争力。焊接&#xff0c;作为新能源汽车生产流程里的关键一环&#xff0c;无论是构建车身框架&#xff0c;还是连接电池模组&#xff0c;其质量的好坏都起着决定性作用。而在焊接…

Linux:面试题

1. 什么是中断和异常&#xff1f; 中断&#xff1a;由外部设备&#xff08;如键盘、网卡&#xff09;触发的异步事件&#xff0c;用于通知 CPU 有紧急事件需要处理。 异常&#xff1a;由 CPU 内部执行指令时产生的同步事件&#xff08;如除零错误、缺页异常&#xff09;&#…

linux关闭某端口暂用的进程

查看是哪个端口暂用 sudo netstat -tulpn | grep :80根据图片 显示 80端口暂用的 进程id是 3002 结束进程id为3002的进程 sudo kill -9 3002

【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核

如果你在conda的base环境运行了jupyter lab打开了一个ipynb文本&#xff0c;此时选择的内核是base虚拟环境的Python内核&#xff0c;如果我想切换成其他conda虚拟环境来运行这个文件该怎么办&#xff1f;下面我们试着还原一下问题&#xff0c;并且解决问题。 【注】 这个问题出…

React Flow 边的基础知识与示例:从基本属性到代码实例详解

本文为《React Agent&#xff1a;从零开始构建 AI 智能体》专栏系列文章。 专栏地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。项目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代码示​例与实战源&#xff09;。完整介绍…

ZooKeeper 原理解析及优劣比较

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 引言 在分布式系统中&#xff0c;服务注册、配置管理、分布式锁、选举等场景都需要一个高可用、一致性强的协调服务。Apache ZooKeeper 凭…

模糊照片变清晰:照片高清修复 ComfyUI 使用教学

模糊照片变清晰 满心欢喜地翻出旧相册&#xff0c;想重温那些美好的回忆&#xff0c;结果照片却模糊不清&#xff0c;根本看不清当年的模样&#xff1b;又或者精心拍摄了一张超有氛围感的照片&#xff0c;结果因为手抖或者光线问题&#xff0c;变得模糊&#xff0c;无法发朋友圈…

IEEEtran中文献中的作者大于3个时,用et al.省略

latex&#xff1a; 在使用bib文件的时候&#xff0c;当参考文献超过三个作者时&#xff0c;第三个作者后加逗号并接上et al.。我使用的是IEEEtran.bst。 \begingroup \small \bibliographystyle{IEEEtran} \bibliography{newbmyref1} \endgroup1.需要将IEEEtran.bst添加到这个…

Android Studio Kotlin 中的方法添加灰色参数提示

在使用 Android Studio 时&#xff0c; 我发现使用 Java 编写方法后在调用方法时&#xff0c; 会自动显示灰色的参数。 但在 Kotlin 中没有显示&#xff0c; 于是找了各种方法最后找到了设置&#xff0c; 并且以本文章记录下来。 博主博客 https://blog.uso6.comhttps://blog.…

python宠物用品商城系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…

《具身智能机器人:自修复材料与智能结构设计的前沿探索》

在具身智能机器人的研发进程中&#xff0c;自修复材料与智能结构设计无疑是极具挑战性与创新性的关键领域&#xff0c;吸引着无数科研人员投身其中&#xff0c;探寻未知。 传统机器人在复杂多变的环境中执行任务时&#xff0c;一旦材料出现损伤&#xff0c;如外壳刮擦、内部线…

矩阵的秩(Rank)

矩阵的秩&#xff08;Rank&#xff09;是线性代数中的核心概念&#xff0c;表示矩阵中线性无关的行&#xff08;或列&#xff09;的最大数量&#xff0c;反映了矩阵所包含的“独立信息”的多少。以下是其核心要点&#xff1a; 1. 秩的定义 行秩&#xff1a;矩阵中线性无关的行…

麒麟系统编译osg —— 扩展篇

一、背景 前文讲到麒麟系统编译osg&#xff0c;通常情况下会提示&#xff1a; 意思是无法生成插件osgdb_jpeg&#xff0c;需要配置“JPEG_LIBRARY”和“JPEG_INCLUDE_DIR”。 经查&#xff0c;本机不存在jpeglib.h和libjpeg.so&#xff0c;需要另外安装。 二、编译jpeg库 …

【数据仓库面试题合集①】数据建模高频面试题及解析

🧠 面试官爱问什么?——核心考察点 数据建模作为数仓岗位面试的重头戏,考察的不只是模型知识,更是对业务理解、抽象能力和工程落地经验的综合评估。常见题型可分为三类: 概念类:模型类型、建模方法论(如维度建模、范式建模) 场景类:给定一个业务场景进行模型设计(如…

园区无人机智能巡检项目方案

在工业4.0与智慧园区建设加速推进的今天&#xff0c;传统人工巡检的局限性日益凸显&#xff1a;效率低、覆盖范围有限、安全隐患大。而无人机智能巡检技术的崛起&#xff0c;正以其 "高空视角AI大脑全自动作业" 的创新模式&#xff0c;重新定义园区管理标准。本文将深…

【C++】vector:容器的别样风采

目录 vector&#xff1a; vector实例化&#xff1a; vector构造函数&#xff1a; vector对象尾插&#xff1a;v1.push_back() vector迭代器&#xff1a; vector实例化string类型的对象 vector接口: begin()end()//rbegin()rend() resize()&#xff1a; vector&#xff…