NC37.合并区间

229 阅读1分钟

1. 题目

www.nowcoder.com/practice/69…

image.png

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))