56. mergeIntervals
分析
- 排序:
- 首先将所有区间按照起始值从小到大排序。排序后,若两个区间有重叠,它们一定是相邻的
- 遍历与合并:
- 用变量
l
和r
分别表示当前合并区间的起始和结束 - 遍历排序后的区间:
- 如果当前遍历区间的起始值大于当前合并区间的结束值
r
,说明当前区间与前面的合并区间没有重叠,应将前面的合并区间加入结果,并更新l
和r
- 如果有重叠,则将
r
更新为当前区间结束值的较大值
- 如果当前遍历区间的起始值大于当前合并区间的结束值
- 遍历结束后,将最后一个合并区间加入结果
- 用变量
时间复杂度
- 排序:
O(nlogn)
,n
是区间的数量 - 遍历:
O(n)
,每个区间只会被处理一次
总时间复杂度为 O(nlogn)
空间复杂度
- 排序所需的额外空间复杂度为
O(logn)
(排序算法的递归栈空间) - 结果存储的空间复杂度为
O(n)
总空间复杂度为 O(n)
C++代码
|
|