题目内容
给出一个区间的集合,请合并所有重叠的区间。
https://leetcode-cn.com/problems/merge-intervals/
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
题目思路
首先要明确的是,给出的两个例子虽然都是按照start从小到大排序的,但是后面的案例却不是。因而需要先进行排序。接下来建立一个输出数组,把输入数组的第一个元素插入。接下来就是遍历输入数组进行比对,比对分为三种情况。对应的结果分别是包含、扩充和新建一个区间。然后按照这三种情况来安排输出数组即可。
程序代码
# Definition for an interval.
# class Interval(object):
# 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]
"""
l=len(intervals)
if not intervals:
return []
elif l==1:
return intervals
intervals = sorted(intervals, key=lambda x: x.start)
res=[]
res.append(intervals[0])
for i in range(1,l):
if res[-1].start<=intervals[i].start and res[-1].end>=intervals[i].end:
continue
elif intervals[i].start>res[-1].end:
res.append(intervals[i])
elif res[-1].start<=intervals[i].start<=res[-1].end and intervals[i].end>res[-1].end:
res[-1].end=intervals[i].end
return res