描述
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
分析
类似题还有6066. 统计区间中的整数数目
利用原来的数组有序且无重叠,遍历数组。
1.把与newInterval无重叠的数组加入结果集合。
2.融合与newInterval交接的数组,然后加入结果集合。
3.把剩余的数组加入结果集合。
判断区间重合的条件是:
newInterval[0] <= intervals[i][1] && newInterval[1] >= intervals[i][0]
新区间的左端点小于等于当前区间的右端点,新区间的右端点大于等于当前区间的左端点。
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> list = new ArrayList<>();
int i = 0;
int n = intervals.length;
while(i < n && intervals[i][1] < newInterval[0]){
list.add(intervals[i++]);
}
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++;
}
list.add(newInterval);
while(i < n){
list.add(intervals[i++]);
}
return list.toArray(new int[0][]);
}
}