news 2026/7/11 2:44:18

(14)LeetCode 56. 合并区间

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(14)LeetCode 56. 合并区间

LeetCode 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. 排序:按照每个区间的左端点升序排序,这样所有区间按起始位置有序排列。
  2. 一次遍历合并
    • 用两个变量lr记录当前合并区间的左右端点。
    • 依次检查后续区间:
      • 若当前区间的左端点> r,说明与当前合并区间没有重叠,将当前合并区间存入结果,并更新lr为新区间的端点。
      • 否则,说明有重叠,更新r = max(r, current_end),合并区间。
  3. 收尾:遍历结束后,将最后一个合并区间加入结果。

为什么排序是关键?

排序后,我们只需从左到右扫描一次,因为左端点递增,任何重叠只可能发生在相邻区间之间,无需回头检查。

重叠判断条件

  • 区间[a, b][c, d](已排序,a ≤ c)重叠当且仅当c ≤ b(闭区间,等于也算重叠)。
  • 在代码中,我们判断intervals[i][0] > r则为不重叠,否则为重叠。

🧑‍💻 C++ 代码实现

classSolution{public:vector<vector<int>>merge(vector<vector<int>>&intervals){vector<vector<int>>res;// 存储合并后的结果if(intervals.empty())returnres;// 处理空输入// 1. 按区间左端点排序sort(intervals.begin(),intervals.end());// 2. 初始化当前合并区间intl=intervals[0][0],r=intervals[0][1];// 3. 遍历后续区间for(inti=1;i<intervals.size();++i){if(intervals[i][0]>r){// 无重叠res.push_back({l,r});// 保存当前合并区间l=intervals[i][0];// 开始新区间r=intervals[i][1];}else{// 有重叠r=max(r,intervals[i][1]);// 合并,更新右端点}}// 4. 加入最后一个区间res.push_back({l,r});returnres;}};

🔍 代码细节解析

步骤说明
sort(intervals.begin(), intervals.end())按左端点升序排序,左端点相同则按右端点升序(不影响合并逻辑)
if (intervals[i][0] > r)判断无重叠的条件:当前左端点严格大于当前右端点(闭区间,等于则重叠)
res.push_back({l, r})将合并好的区间存入结果,注意用{}初始化vector<int>
r = max(r, intervals[i][1])有重叠时,取两个右端点的较大值,扩大合并区间
最后res.push_back({l, r})循环结束后,最后一个合并区间尚未加入,需补加

⏱ 复杂度分析

  • 时间复杂度:O(n log n),其中 n 是区间个数。主要耗费在排序上,遍历部分为 O(n)。
  • 空间复杂度:O(n)(用于存储结果)。若不计结果数组,排序的栈空间为 O(log n)(快速排序)。

🧪 示例模拟

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]

步骤当前区间当前合并区间[l, r]操作
初始化-[1, 3]从第一个区间开始
i=1[2,6][1, 3][1, 6]重叠,扩展r=6
i=2[8,10][1, 6]无重叠,保存[1,6],新合并区间[8,10]
i=3[15,18][8,10]无重叠,保存[8,10],新合并区间[15,18]
结束-[15,18]保存最后一个区间

最终结果:[[1,6],[8,10],[15,18]]


⚠️ 注意事项

  • 输入区间是闭区间,因此[1,2][2,3]视为重叠,合并为[1,3]
  • 排序是必须的,否则无法通过一次遍历判断所有重叠。
  • 处理空输入时,直接返回空数组,避免访问越界。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 2:42:10

【机器人路径规划】matlab遗传算法的机器人路径规划算法源码

基于遗传算法的机器人路径规划MATLAB源码 1、原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 【老生谈算法】基于遗传算法的机器人路径规划MATLAB源码.docx 2、算法详解: 算法的思路如下:取各障碍物顶点连线的中点为路径点,相…

作者头像 李华
网站建设 2026/7/11 2:42:00

跨越二十载的魔幻重逢 《奇迹 MU:荣耀出征》官方正版下载全指南

2002 年&#xff0c;《奇迹 MU》凭借突破性的 3D 画质与开创性的魔幻玩法闯入国内网游市场&#xff0c;勇者大陆的喷泉广场、冰风谷的漫天飞雪、亚特兰蒂斯的深海秘境&#xff0c;还有装备掉落时那声清脆的 “叮”&#xff0c;共同构成了 80、90 后玩家的青春集体记忆。二十余年…

作者头像 李华
网站建设 2026/7/11 2:40:56

CORTIS开源项目:老旧硬件上的深度学习模型优化部署实践

这次我们来看一个名为 CORTIS 的开源项目&#xff0c;从标题关键词来看&#xff0c;它似乎与模型训练、优化或特定硬件适配相关。这类项目通常关注的是如何在有限资源下实现模型的高效运行&#xff0c;特别是针对一些老旧或非主流硬件设备。CORTIS 项目最值得关注的点在于它对&…

作者头像 李华
网站建设 2026/7/11 2:40:23

Solar Energy (IF 7.188) 2024年热点解读:从光伏材料到电网整合的3大技术趋势

2024年太阳能技术前沿&#xff1a;从材料革新到系统集成的突破性趋势站在2024年的门槛回望&#xff0c;全球太阳能产业正经历着从量变到质变的关键跃迁。根据国际能源署最新报告&#xff0c;太阳能发电量在过去五年年均增长率达到22%&#xff0c;而这一数字背后是光伏材料效率的…

作者头像 李华
网站建设 2026/7/11 2:40:00

STM32 I2C 事件状态机解析:从 EV5 到 EV8_2 的 7 个关键事件

STM32 I2C 事件状态机深度解析&#xff1a;从硬件机制到实战调试1. I2C 状态机架构与核心事件概述STM32 的硬件 I2C 外设通过状态寄存器&#xff08;SR1/SR2&#xff09;和事件标志构建了一套完整的通信状态机。这套机制将复杂的时序逻辑转化为可编程控制的硬件自动化流程&…

作者头像 李华
网站建设 2026/7/11 2:38:43

红外对射传感器防误触设计:基于LM393的3种硬件滤波与软件消抖方案

红外对射传感器防误触设计&#xff1a;基于LM393的3种硬件滤波与软件消抖方案在工业自动化领域&#xff0c;红外对射传感器如同精密仪器中的"神经末梢"&#xff0c;其可靠性直接关系到整个系统的稳定性。当电机测速误差超过5%或流水线计数出现漏检时&#xff0c;背后…

作者头像 李华