intervals = [[1,3],[2,6],[8,10],[15,18]]
在上面的数组中,观察[1,3],[2,6], 1小于2,2小于3,并且6大于3,所以[1,3],[2,6]可以合并成[1,6]
intervals = [[1,4],[2,3]]
在上面的数组中,1小于2,2和3均小于4,所以可以合并成[1,4]
如果对intervals进行排序,首数字小的排在前面,则只需要比较[, ], [, ]中的和,以及已合并数组中,最后一个数组的和当前遍历数组中的
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a1, a2) -> a1[0] - a2[0]);
int len = intervals.length;
int[][] res = new int[len][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(res[idx][1], interval[1]);
}
}
return Arrays.copyOf(res, idx + 1);
}
不能用for(int i = 0; i < len; i++)遍历intervals,因为必须用idx表示已经合并的子数组的下标