1. 题目
www.nowcoder.com/practice/69…

2. 解析
1. 判断临界值
len(intervals) == 0
2. 对区间进行升序,便于后续判断
intervals.sort(key=lambda i: i.start)
3. 寻找满足重叠条件的区间
if intervals[i].start <= result[-1].end:
result[-1].end = max([intervals[i].end, result[-1].end])
3. 核心代码
from typing import List
class Interval:
def __init__(self, a=0, b=0):
self.start = a
self.end = b
def __repr__(self):
return f'{self.start},{self.end}'
class Solution:
def merge(self, intervals: List[Interval]) -> List[Interval]:
if len(intervals) == 0:
return intervals
intervals.sort(key=lambda i: i.start)
result = [intervals[0]]
for i in range(1, len(intervals)):
if intervals[i].start <= result[-1].end:
result[-1].end = max([intervals[i].end, result[-1].end])
else:
result.append(intervals[i])
return result
if __name__ == '__main__':
lis = [Interval(i[0], i[1]) for i in [[10, 30], [20, 60], [80, 100], [150, 180]]]
s = Solution()
print(s.merge(lis))