题目:
大体思路:
先排序,设置一个新数组,将原数组遍历的第一位添加到新数组,之后不断的将遍历原数组后的起始位置和新数组的终止位置进行比较,大于,则添加到新数组,不大于,则合并到新数组
代码:
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) {
// 第一次直接将interval添加到结果数组,后续再进行判断
// 如果当前区间的起始位置大于新数组最后区间的终止位置,则直接添加到结果数组
if (idx == -1 || interval[0] > res[idx][1]) {
res[++idx] = interval;
} else {
// 反之,将当前区间合并到结果数组的最后区间
res[idx][1] = Math.max(res[idx][1],interval[1]);
}
}
// 将空余的空间去除
return Arrays.copyOf(res,idx + 1);
}
}
Arrays.copyOf用法:
Arrays.copyOf(int[] array, int length)
第一个变量表示原来的数组对象
第二个变量表示新的数组的长度,如果新数组的长度超过原数组的长度,保留数组元素的默认基本类型的值。