56.合并区间
以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
1 2 3
| 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
|
示例 2:
1 2 3
| 输入:intervals = [[1,4],[4,5]] 输出:[[1,5]] 解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
|
要注意到二维数组的排序这个问题,通过修改compare
迭代器
Solution
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 38
| class Solution { public int[][] merge(int[][] intervals) { int i = 0; int j = 1; int[][] ans = new int[intervals.length][2]; int cnt = 0;
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); while (j <= intervals.length) { while (j < intervals.length && intervals[i][1] >= intervals[j][0]) { if (intervals[j][1] >= intervals[i][1]) { intervals[i][1] = intervals[j][1]; j++; } else { j++; } } ans[cnt++] = intervals[i]; i = j; j++; }
int[][] x = new int[cnt][2]; for (int k = 0; k < cnt; k++) { x[k] = ans[k]; } return x; } }
|