LeetCode 合并区间

LeetCode  合并区间

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

首先,将各个区间按照开始时间升序排列,这样的话,如果相邻区间出现重叠,则一定是  前一个区间的结束时间end >= 后一个区间的开始时间start 。

所以,我们首先将interval按照开始时间start进行排序。

接下来,遍历interval,如果是第一个区间直接append入结果res列表;

           如果,区间不与res中最后一个区间重叠,则append如res列表;

            否则,从res中取出最后一个区间,与当前区间合并后,再append如res列表。

 1 # Definition for an interval.
 2 # class Interval:
 3 #     def __init__(self, s=0, e=0):
 4 #         self.start = s
 5 #         self.end = e
 6 
 7 class Solution:
 8     def merge(self, intervals):
 9         """
10         :type intervals: List[Interval]
11         :rtype: List[Interval]
12         """
13         lenint = len(intervals)
14         if lenint <= 1:
15             return intervals
16         #按照第一个元素进行排序
17         intervals = sorted(intervals, key=lambda inter: inter.start)
18         #遍历第二个元素,如果第二个元素的值比下一个列表的第一个元素的值大,则合并列表
19         res = []
20         for temp in intervals:
21             if len(res) == 0:
22                 res.append(temp)
23             #如果不冲突,直接加入
24             if temp.start > res[len(res)-1].end :
25                 res.append(temp)
26             #如果冲突,进行合并
27             else:
28                 temp2 = res.pop(len(res)-1)
29                 res.append(Interval(temp2.start, max(temp.end, temp2.end)))
30         for temp in res:
31             print(temp.start,temp.end)
32         return res
原文地址:https://www.cnblogs.com/yxh-amysear/p/9294815.html