题目
描述
给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
数据范围:区间组数 0≤n≤1000,区间内 的值都满足 0≤val≤10000
要求:空间复杂度 O(n),时间复杂度 O(nlogn)
进阶:空间复杂度 O(val),时间复杂度O(val)
思路
先根据元素的start值进行排序,然后判断包含、相交、不相交三种情况的处理。
代码
python版本:
# class Interval:
# def __init__(self, a=0, b=0):
# self.start = a
# self.end = b
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param intervals Interval类一维数组
# @return Interval类一维数组
#
class Solution:
def merge(self , intervals: List[Interval]) -> List[Interval]:
# write code here
if(len(intervals)==0):
return []
def sort_func(ele):
return ele.start
intervals.sort(key=sort_func)
frist = intervals[0]
res = [frist]
for second in intervals[1:]:
if(second.end < frist.end):#包含
continue
elif(second.end>=frist.end and frist.end>=second.start):#相交
res.pop()
res.append(Interval(frist.start, second.end))
frist = Interval(frist.start, second.end)
else:#不相交
res.append(second)
frist = second
return res
c++版本:
无