同样的问题同样的配方,这道题和之前那道区间重叠差不多,那无非就是先找出不重叠的插入列表里面,后找到重叠的部分,合并后插入列表里面。
代码如下:
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> merged = new ArrayList<>();
int i = 0;
int n = intervals.length;
// 将所有不与newInterval重叠的区间添加到merged里面去
while (i < n && intervals[i][1] < newInterval[0]) {
merged.add(intervals[i]);
i++;
}
//合并所有与newInterval重叠的区间
while (i < n && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
//将合并好的newInterval添加到merged里面
merged.add(newInterval);
//将剩余区间添加到merged里面
while (i < n) {
merged.add(intervals[i]);
i++;
}
//将列表转成二维数组输出
return merged.toArray(new int[merged.size()][]);
}