给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
其实很多的算法题都有很多隐藏的条件需要利用,单纯依靠题目中的条件很难解出题目。这里首先是需要把列表中的第一个元素排序,然后再进行操作。
def merge(intervals):
res = []
intervals.sort(key=lambda x: x[0])
i = 0
while i < len(intervals):
cur_start = intervals[i][0]
cur_end = intervals[i][1]
if res:
prev_start, prev_end = res[-1]
high = min(prev_end, cur_end)
low = max(prev_start, cur_start)
if low <= high:
if cur_end > prev_end:
res[-1][1] = cur_end
else:
res.append(intervals[i])
else:
res.append(intervals[i])
i += 1
return res