思路:
1.把所有数组按从小到大排序,并创建一个二维数组res
2.遍历给定的二维数组
3.判断:如果是第一个数组或者遍历数组的第一个数大于上一个数组的第二个数,直接把这个数组加入到结果数组里;否则把上一个数组的第二个数更新为这次遍历数组的第二个数和上一个数组的第二个数中的最大值。
4.返回结果
代码:
class Solution {
public int[][] merge(int[][] intervals) {
int[][] res = new int[intervals.length + 1][2];
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
int idx = -1;
for (int[] interval : intervals) {
if (idx == -1 || interval[0] > res[idx][1]) {
res[++idx] = interval;
} else {
res[idx][1] = Math.max(interval[1], res[idx][1]);
}
}
return Arrays.copyOf(res, idx + 1);
}
}