5
5
6
6
## 题目大意
7
7
8
- 数组 intervals 表示若干个区间的集合。请合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需要恰好覆盖原数组中的所有区间。
8
+ ** 描述** :给定数组 ` intervals ` 表示若干个区间的集合,其中单个区间为 ` intervals[i] = [starti, endi] ` 。
9
+
10
+ ** 要求** :合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
11
+
12
+ ** 说明** :
13
+
14
+ - 1ドル \le intervals.length \le 10^4$。
15
+ - $intervals[ i] .length == 2$。
16
+ - 0ドル \le starti \le endi \le 10^4$。
17
+
18
+ ** 示例** :
19
+
20
+ ``` Python
21
+ 输入:intervals = [[1 ,3 ],[2 ,6 ],[8 ,10 ],[15 ,18 ]]
22
+ 输出:[[1 ,6 ],[8 ,10 ],[15 ,18 ]]
23
+ 解释:区间 [1 ,3 ] 和 [2 ,6 ] 重叠, 将它们合并为 [1 ,6 ].
24
+
25
+
26
+ 输入:intervals = [[1 ,4 ],[4 ,5 ]]
27
+ 输出:[[1 ,5 ]]
28
+ 解释:区间 [1 ,4 ] 和 [4 ,5 ] 可被视为重叠区间。
29
+ ```
9
30
10
31
## 解题思路
11
32
12
- 设定一个数组 ans 用于表示最终不重叠的区间数组,然后对原始区间先按照区间左端点大小从小到大进行排序。
33
+ ### 思路 1:排序
13
34
14
- 遍历所有区间。先将第一个区间加入 ans 数组中。然后依次考虑后边的区间,如果第 i 个区间左端点在前一个区间右端点右侧,则这两个区间不会重合,直接将该区间加入 ans 数组中。否则的话,这两个区间重合,判断一下两个区间的右区间值,更新前一个区间的右区间值为较大值,然后继续考虑下一个区间,以此类推。
35
+ 1 . 设定一个数组 ` ans ` 用于表示最终不重叠的区间数组,然后对原始区间先按照区间左端点大小从小到大进行排序。
36
+ 2 . 遍历所有区间。
37
+ 3 . 先将第一个区间加入 ` ans ` 数组中。
38
+ 4 . 然后依次考虑后边的区间:
39
+ 1 . 如果第 ` i ` 个区间左端点在前一个区间右端点右侧,则这两个区间不会重合,直接将该区间加入 ` ans ` 数组中。
40
+ 2 . 否则的话,这两个区间重合,判断一下两个区间的右区间值,更新前一个区间的右区间值为较大值,然后继续考虑下一个区间,以此类推。
41
+ 5 . 最后返回数组 ` ans ` 。
15
42
16
- ##代码
43
+ ### 思路 1: 代码
17
44
18
45
``` Python
19
46
class Solution :
@@ -29,3 +56,8 @@ class Solution:
29
56
return ans
30
57
```
31
58
59
+ ### 思路 1:复杂度分析
60
+
61
+ - ** 时间复杂度** :$O(n \times \log_2 n)$。其中 $n$ 为区间数量。
62
+ - ** 空间复杂度** :$O(n)$。
63
+
0 commit comments