在给定的区间集合已经按照左端点排序的前提下,所有与区间 S 重叠的区间在数组 intervals 中下标范围是连续的,因此我们可以对所有的区间进行一次遍历,就可以找到这个连续的下标范围。
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
int left = newInterval[0];
int right = newInterval[1];
boolean placed = false;
List<int[]> ansList = new ArrayList<int[]>();
for(int[] interval : intervals){
if(interval[0] > right){
//在插入区间的右侧且无交集
if(!placed){
ansList.add(new int[]{left, right});
placed = true;
}
ansList.add(interval);
}else if(interval[1] < left){
// 在插入区间的左侧且无交集
ansList.add(interval);
}else{
// 与插入区间有交集,计算它们的并集
left = Math.min(left, interval[0]);
right = Math.max(right, interval[1]);
}
}
if(!placed){
ansList.add(new int[]{left, right});
}
int[][] res = new int[ansList.size()][2];
for(int i = 0; i < ansList.size(); i++){
res[i] = ansList.get(i);
}
return res;
}
}