每日力扣:合并区间
题目来源:leetcode
题目描述如下:
给出一个区间的集合,请合并所有重叠的区间。
示例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] 可被视为重叠区间。
说明:
intervals[i][0] <= intervals[i][1]
本题可先对原始数据 intervals进行排序,排序的依据为 每一个子数组的第一个数的大小。
再创建一个目标数组 result,将符合题目要求的数据存入其中,并在最后进行输出。
复杂度分析
- 时间复杂度:O(N),其中 N 是 intervals 的长度。
- 空间复杂度:O(N),新建了一个result数组。
以下代码为python3的代码。
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
num=len(intervals)
if num==0:
return []
else:
intervals.sort(key=lambda x: x[0]) #排序
result=[intervals[0]] #初始化数组
for i in range(num): #遍历经过处理的原始数据
if result[-1][1] < intervals[i][0]: #进行相应数据的判定,此处为不覆盖
result.append(intervals[i])
elif result[-1][1]<intervals[i][1]: #此处为覆盖,并更新目标数据
result[-1][1]=intervals[i][1]
return resule
最终,经leetcode 平台检验,正确通过。