56. 合并区间
type
status
date
slug
summary
tags
category
difficulty
icon
password
56. 合并区间
以数组
intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例 1:
示例 2:
提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
解题思路:
该题的解题思路如下:
- 首先,我们需要按照区间的起点对所有区间进行排序,这样可以保证我们按顺序处理区间时,前面的区间的起点一定小于或等于后面的区间的起点。
- 定义两个变量 st 和 ed,分别表示当前合并区间的起点和终点,初始值设为 -1。
- 遍历排序后的区间数组,对于每个区间,我们需要判断:
- 如果当前区间的起点大于上一个区间的终点(ed < interval[0]),说明这两个区间不重叠:
- 如果不是第一个区间(ed != -1),将之前合并好的区间 [st, ed] 加入结果数组
- 更新当前区间的起点和终点为当前遍历到的区间的起点和终点
- 如果当前区间的起点小于或等于上一个区间的终点,说明区间重叠:
- 更新当前合并区间的终点为两个区间终点的较大值(ed = max(ed, interval[1]))
- 最后,需要将最后一个合并区间加入结果数组(如果存在的话)。
时间复杂度:O(nlogn),其中 n 是区间的数量,主要是排序的时间复杂度。
空间复杂度:O(1),不考虑返回值的空间,只需要常数空间存储若干变量。
- 作者:Episkey
- 链接:https://episkey.top/article/merge-intervals
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。