给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]
对于这个问题我们借助一张图像进行分析:
其中
- 绿色部分代表待插入数组
- 橙色部分代表原有数组
对于源有数组,我们可以将其分为三类:
- 情况一:原有数组在待插入数组左侧且,无交集,那么直接加入结果集中即可。
- 情况二:在排除情况一的前提下,原有数组左侧 <= 待插入数组的右侧 的数组。在此情况下我们不断拓展待插入数组的边界直至其完全包含全部交集的原有数组。
- 情况三:在排除情况一、二的情况下按顺序直接将剩余待插入数组顺序加入结果集中即可。
以下为实现部分:
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> result = new LinkedList<>()