描述
给出若干闭合区间,合并所有重叠的部分。
您在真实的面试中是否遇到过这个题? 是
样例
Given intervals => merged intervals:
[ [
(1, 3), (1, 6),
(2, 6), => (8, 10),
(8, 10), (15, 18)
(15, 18) ]
]
挑战
O(n log n) 的时间和 O(1) 的额外空间。
实现代码:
思路:先对列表按照start进行排序,然后比较,如果end大于等于start,证明区间重复,进行合并。
新区间取res的start, 比较重复区间的大小,取大的一方。
"""
Definition of Interval.
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
"""
class Solution:
"""
@param intervals: interval list.
@return: A new interval list.
"""
'''
def merge(self, intervals):
# write your code here
if len(intervals) < 2:
return intervals
intervals = sorted(intervals,key= lambda x: x.start)
res = [intervals[0]]
i = 1
k = 0
while i < len(intervals):
if res[k].end >= intervals[i].start:
res[k] = Interval(res[k].start, res[k].end if res[k].end >= intervals[i].end else intervals[i].end)
else:
res.append(intervals[i])
k += 1
i += 1
return res
'''
def merge(self, intervals):
# write your code here
if len(intervals) < 2:
return intervals
intervals = sorted(intervals, key=lambda x: x.start)
res = [intervals[0]]
for interval in intervals:
if interval.start > res[-1].end:
res.append(interval)
elif interval.end > res[-1].end:
res[-1].end = interval.end
return res