leetcode-56.合并区间

660 词

核心理解:
两个区间 [a, b] 和 [c, d] 重叠的完整数学条件是:
(第一个区间的起点 第二个区间的终点)
(第二个区间的起点 第一个区间的终点)
而排序的核心作用就是通过调整区间顺序,消除对 的显式判断,使得我们只需关注 这一个条件。

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution:

    def merge(self, intervals: List[List[int]]) -> List[List[int]]:

        if not intervals:

            return []

        intervals.sort(key = lambda x: x[0])

        merge=[intervals[0]]

        for current in intervals[1:]:

            last=merge[-1]

            if last[1] >= current[0]:

                last[1]=max(last[1],current[1])

            else:

                merge.append(current)

        return merge

题目分析:
本题的核心是处理一个二维的数组。
先将区间按左端点排序。

1
intervals.sort(key = lambda x: x[0])

image.png

剩下的步骤只需要完成比较curret和last
如果current[0]小于last[1],就说明可以合并,更新的时候只用把last[1]更新成max
(current[1],last[1])即可
如果current[0]大于last[1],直接append current即可。