合并区间

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

示例 1:

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

示例 2:

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

思路

先排序然后遍历,排序按照 start 值大小排序,排序完后,遍历排序后的列表 sorted_list,假设当前元素位置 i, 判断 sorted_list[i-1].end >= sorted_list[i],说明两个区间有重合,将 sorted_list[i].start = sorted_list[i-1].end,注意判断 sorted_list[i-i].end 是否大于 sorted_list[i].end,如果大于,则 sorted_list[i].end = sorted_list[i-1].end

解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Definition for an interval.
# class Interval:
# def __init__(self, s=0, e=0):
# self.start = s
# self.end = e

class Solution:
def merge(self, intervals: List[Interval]) -> List[Interval]:
sorted_start_list = sorted(intervals,key=lambda x:x.start)
list_len = len(sorted_start_list)
res_list = []
count = 0
i = 1
while i < list_len - count:
if sorted_start_list[i-1].end >= sorted_start_list[i].start:
if sorted_start_list[i-1].end > sorted_start_list[i].end:
sorted_start_list[i].end = sorted_start_list[i-1].end
sorted_start_list[i].start = sorted_start_list[i-1].start
sorted_start_list.remove(sorted_start_list[i-1])
count += 1
i -= 1
i += 1
return sorted_start_list