个区间若能合并,则第一个区间的右端点一定不小于第二个区间的左端点。所以先把区间集合按照左端点从小到大进行排序,接着从第一个区间开始遍历,对每个区间执行如下操作:
1.首先保存该区间的左端点start和右端点end;
2.从该区间的下一个区间开始,依次比较此区间的左端点与上一个区间的右端点,若满足合并条件则记录新合并区间的右端点。注意右端点取当前区间与之前区间右端点的较大值;
3.若当前区间不再满足合并条件或者遍历到了集合末尾,就构建新合并区间,其中左端点为初始区间的左端点,右端点为当前所有合并区间右端点的最大值,然后将其加入到结果集合中,接着合并下一个区间;
# Definition for an interval. # class Interval: # def __init__(self, s=0, e=0): # self.start = s # self.end = e class Solution(object): def merge(self, intervals): """ :type intervals: List[Interval] :rtype: List[Interval] """ if intervals == []: return [] intervals = sorted(intervals,key=lambda x:x.start) res = [] tmp = intervals[0] for i in range(1,len(intervals)): if tmp.end >= intervals[i].start: tmp.end = max(tmp.end,intervals[i].end) else: res.append(tmp) tmp = intervals[i] res.append(tmp) return res