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
解题思路:
该题的解题思路如下:
  1. 首先,我们需要按照区间的起点对所有区间进行排序,这样可以保证我们按顺序处理区间时,前面的区间的起点一定小于或等于后面的区间的起点。
  1. 定义两个变量 st 和 ed,分别表示当前合并区间的起点和终点,初始值设为 -1。
  1. 遍历排序后的区间数组,对于每个区间,我们需要判断:
  • 如果当前区间的起点大于上一个区间的终点(ed < interval[0]),说明这两个区间不重叠:
  • 如果不是第一个区间(ed != -1),将之前合并好的区间 [st, ed] 加入结果数组
  • 更新当前区间的起点和终点为当前遍历到的区间的起点和终点
  • 如果当前区间的起点小于或等于上一个区间的终点,说明区间重叠:
  • 更新当前合并区间的终点为两个区间终点的较大值(ed = max(ed, interval[1]))
  1. 最后,需要将最后一个合并区间加入结果数组(如果存在的话)。
时间复杂度:O(nlogn),其中 n 是区间的数量,主要是排序的时间复杂度。
空间复杂度:O(1),不考虑返回值的空间,只需要常数空间存储若干变量。
 
上一篇
189. 轮转数组
下一篇
53. 最大子数组和

评论
Loading...