57.插入区间
题目描述
读题
得到条件:
- 插入一个新的区间
- 有序,不重叠
题解
详细请看代码:
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
// 定义最大空间
int[][] res = new int[intervals.length + 1][];
int index = 0;
int i = 0;
// 首先将新区间左边且相离的区间加入结果集
// (遍历时,如果当前区间的结束位置小于新区间的开始位置,说明当前区间在新区间的左边且相离);
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
res[index++] = intervals[i++];
}
// 接着判断当前区间是否与新区间重叠,重叠的话就进行合并,直到遍历到当前区间在新区间的右边且相离,将最终合并后的新区间加入结果集;
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(intervals[i][0], newInterval[0]);
newInterval[1] = Math.max(intervals[i][1], newInterval[1]);
i++;
}
// 最后将新区间右边且相离的区间加入结果集。
res[index++] = newInterval;
while (i < intervals.length) {
res[index++] = intervals[i++];
}
return Arrays.copyOf(res, index);
}
}