-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathleetcode56_merge.java
More file actions
37 lines (35 loc) · 1.26 KB
/
Copy pathleetcode56_merge.java
File metadata and controls
37 lines (35 loc) · 1.26 KB
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
26
27
28
29
30
31
32
33
34
35
36
37
package leetcode.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
/**
* 题目描述:
* 合并区间
* 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。
* 请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
* <p>
* 输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
* 输出:[[1,6],[8,10],[15,18]]
* 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
*/
public class leetcode56_merge {
public int[][] merge(int[][] intervals) {
if (intervals == null || intervals.length == 0) {
return intervals;
}
List<int[]> res = new ArrayList<>();
Arrays.sort(intervals, Comparator.comparingInt((int[] a) -> a[0]));
res.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
int[] lastArr = res.get(res.size() - 1);
if (lastArr[1] >= intervals[i][0]) {
lastArr[1] = Math.max(lastArr[1], intervals[i][1]);
}
else {
res.add(intervals[i]);
}
}
return res.toArray(new int[res.size()][2]);
}
}