问题:
给出一个区间的集合,请合并所有重叠的区间。
示例 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] 可被视为重叠区间。
思路:
将intervals中的元素按照每个元素的第一个大小升序排序,再依次循环intervals,比较第i个start和第i+1个end的大小,选取最大的end。
注意:一定要看上面给的提示。不然intervals[0][0]显示不可以这样索引。
代码(python):
# 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):
"""
:type intervals: List[Interval]
:rtype: List[Interval]
intervals[0][0] = intervals[0].start
intervals[0][1] = intervals[0].end
count : 统计符合要求的数
"""
if len(intervals) <= 1:
return intervals
#排序
intervals = sorted(intervals,key = lambda start: start.start)
i = 0
maxx = intervals[0].start
maxy = intervals[0].end
#选择intervals[:].start >= intervals[:].end的值
count = []
while i < len(intervals)-1:
if maxy >= intervals[i+1].start:
maxy = max(maxy, intervals[i+1].end)
else:
count.append([maxx, maxy])
maxx = intervals[i+1].start
maxy = intervals[i+1].end
i += 1
count.append([maxx, maxy])
return count