给出一组区间,请合并所有重叠的区间。
请保证合并后的区间按区间起点升序排列。
//"区间"定义 class Interval { int start; //起点 int end; //终点 }
数据范围:区间组数
,区间内 的值都满足
要求:空间复杂度
,时间复杂度
进阶:空间复杂度
,时间复杂度
//"区间"定义 class Interval { int start; //起点 int end; //终点 }
[[10,30],[20,60],[80,100],[150,180]]
[[10,60],[80,100],[150,180]]
[[0,10],[10,20]]
[[0,20]]
class Solution: def merge(self , intervals ): # write code here if not intervals&nbs***bsp;len(intervals) < 2: return intervals intervals = sorted(intervals, key=lambda a: a.start) res = [intervals[0]] for inter in intervals[1:]: if inter.start <= res[-1].end: res[-1].end = max(res[-1].end, inter.end) else: res.append(inter) return res
class Solution: def merge(self, intervals): intervals.sort(key=lambda x: x.start) i = 1 while i < len(intervals): if intervals[i].start <= intervals[i - 1].end: intervals[i] = Interval(intervals[i - 1].start, max(intervals[i - 1].end, intervals[i].end)) intervals.pop(i - 1) else: i += 1 return intervals
class Solution: def merge(self , intervals ): # write code here result = [] for i in range(len(intervals)): for j in range(len(intervals[i])): result.append(intervals[i][j]) index = 0 while index < len(result) -1: while result[index] > result[index+1]: del result[index] del result[index] index += 1 final = [] result.reverse() while result: temp = [] for i in range(2): temp.append(result.pop()) final.append(temp) return final
# 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 ): # write code here n=len(intervals) if n==0: return [] else: intervals.sort(key=lambda x:x.start) ans=[] ans.append(intervals[0]) for i in intervals[1:]: if i.start<=ans[-1].end: #有重叠 if i.end>ans[-1].end: ans[-1].end=i.end else: #没有重叠就让其作为最后一个元素 #因为是排过序的,所以后面的元素 #绝对和前面无重叠 ans.append(i) return ans
class Solution: def merge(self , intervals ): intervals.sort()#按第一个数字排序以防输入的区间顺序错乱 list1=[] while len(intervals)>1:#为了使后续语句intervals[1][0]不出现越界错误,故设置长度大于1 if intervals[0][1]<intervals[1][0]:#前一个区间的上界小于后一个区间的下界,说明两个区间没有交集,直接添加 list1.append(intervals[0]) intervals.pop(0)#添加完成删除该区间 else:#否则两个区间有交集 intervals[0]=[min(intervals[0][0],intervals[1][0]),max(intervals[0][1],intervals[1][1])]#取两个区间的下界的最小值作为合并后区间的下界,取两个区间的上界的最大值作为合并后区间的上界,即完成两个区间的并集 intervals.pop(1)#合并后intervals的第一个元素用合并后的区间替换,那么参与合并的第二个元素(下标为1)也应该要删除 list1.append(intervals[0])#intervals还剩一个元素即退出循环体,故剩下的一个元素需要添加进来 list1=map(str,list1)#将列表元素的数据类型由整型转化为字符串,才能使用下面的join语句,否则报错 return ",".join(list1)#返回列表的所有元素,即去掉中括号后的列表 #print(Solution().merge([[18,18],[1,2],[8,10],[4,11],[0,8],[19,22]]))