leetcode56:合并区间

以数组 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:定义题目的计算问题性质

题目要求合并重叠的区间,并返回一个不重叠的区间数组,该数组需要恰好覆盖输入中的所有区间。

输入输出条件:

  • 输入:一个二维数组 intervals,每个子数组包含两个整数 [starti, endi],表示一个区间。
  • 输出:一个二维数组,表示合并后的不重叠区间。

限制条件:

  • 1 <= intervals.length <= 10^4:输入的区间数量在1到10^4之间。
  • intervals[i].length == 2:每个区间数组长度为2。
  • 0 <= starti <= endi <= 10^4:区间的起始和结束值在0到10^4之间。

潜在的边界条件:

  • 输入的区间数组可能为空。
  • 所有区间可能都不重叠。
  • 所有区间可能完全重叠。

步骤2:分解题目并描述解决方案

步骤:

  1. 对输入的区间数组按照每个区间的起始值进行排序。
  2. 遍历排序后的区间数组,比较当前区间的起始值和前一个区间的结束值。
  3. 如果当前区间的起始值小于或等于前一个区间的结束值,则它们重叠,合并这两个区间。
  4. 如果不重叠,将前一个区间加入结果数组,并继续处理下一个区间。
  5. 遍历结束后,将最后一个区间加入结果数组。

算法设计思路:

  • 采用贪心算法,因为我们可以通过局部最优(合并当前重叠区间)来达到全局最优(合并所有重叠区间)。

时间复杂度和空间复杂度:

  • 排序的时间复杂度为 O(n log n),其中 n 是区间数组的长度。
  • 遍历区间数组的时间复杂度为 O(n)。
  • 总的时间复杂度为 O(n log n)。
  • 空间复杂度为 O(1),如果忽略排序算法的空间消耗,因为合并操作是在原数组上进行的。

步骤3:C++代码实现

步骤4:通过解决该问题获得的启发

通过解决该问题,我们可以学习到:

  • 贪心算法在处理区间合并问题时的高效性。
  • 如何在遍历过程中进行合并操作,以减少空间复杂度。
  • 对输入数据进行预处理(排序)的重要性。

步骤5:实际应用

实际应用示例:

  • 在航班预订系统中,需要合并重叠的航班时间,以便为乘客提供连续的飞行时间选择。
  • 在日程管理应用中,合并不同会议的时间段,以展示用户的全天日程。

实现方法:

  • 使用上述算法对用户的日程或航班时间进行排序和合并。
  • 将合并后的时间段展示给用户,以便用户能够快速了解其全天的安排。
相关推荐
知识浅谈1 小时前
DeepSeek V4 和 GPT-5.5 在同一天发布了??我也很懵,但对比完我悟了
算法
DeepModel1 小时前
通俗易懂讲透 Q-Learning:从零学会强化学习核心算法
人工智能·学习·算法·机器学习
田梓燊1 小时前
力扣:19.删除链表的倒数第 N 个结点
算法·leetcode·链表
handler012 小时前
从零实现自动化构建:Linux Makefile 完全指南
linux·c++·笔记·学习·自动化
简简单单做算法3 小时前
基于GA遗传优化双BP神经网络的时间序列预测算法matlab仿真
神经网络·算法·matlab·时间序列预测·双bp神经网络
guygg883 小时前
利用遗传算法解决列车优化运行问题的MATLAB实现
开发语言·算法·matlab
武藤一雄3 小时前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章52-交点查找
图像处理·人工智能·opencv·算法·计算机视觉
我头发多我先学4 小时前
C++ 模板全解:从泛型编程初阶到特化、分离编译进阶
java·开发语言·c++
yu85939584 小时前
MATLAB连续线性化模型预测控制(SL-MPC)
算法·机器学习·matlab