解题思路:
class Solution {
public int[][] merge(int[][] intervals) {
// 先按照区间起始位置排序
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
int[][] res = new int[intervals.length][2];
int idx = -1;
for (int[] interval : intervals) {
//直接加入的情况,空二维数组第一次加入元素或二维数组中最后一个区间的右端小于新区间的左端,那么一定不重合
if (idx == -1 || res[idx][1] < interval[0])
res[++idx] = interval;
//合并区间的两种情况
//二维数组中最后一个区间的右端大于等于新区间的左端
//或最后一个区间整体包含新区间(考虑这两种情况所以才取最大值)
else{
res[idx][1] = Math.max(interval[1], res[idx][1]);
}
}
return Arrays.copyOf(res, idx + 1);
}
}