57. Insert Interval
non-overlappint 不覆盖的意思是指,两个数组区间没有出现覆盖例如 [[1,2], [3,4]]是 non-overlapping的,但是[[1,3], [2,4]]重复覆盖了2是 overlapping的
那么给出的 newInterval无非是三种情况
- 对于绝对小于
newInterval区间的情况即intervals[index][1] < newInterval[0] - 对于出现重叠了
newInterval区间的情况需要去除重叠即intervals[index][0] <= newInterval[1] - 那么剩余的都是大于
newInterval区间的情况
解题思路
- 设置指针
size即 intervals.length即终止条件,index 即已经push进结果res的数组 - 对于绝对小于的情况
intervals[index][1] < newInterval[0],直接 push 进 res - 对于出现覆盖的
intervals[index][0] <= newInterval[1],取相对最小值,以及相对最大值 - 剩下的都是大于新区间的值了直接 push
代码
/**
* @param {number[][]} intervals
* @param {number[]} newInterval
* @return {number[][]}
*/
var insert = function(intervals, newInterval) {
let size = intervals.length;
let index = 0;
let res = [];
// [1,3] 最大值比新区间的最小值小即 3 < 5 肯定不覆盖直接push进结果 [5, 8]
while(index < size && intervals[index][1] < newInterval[0]) {
res.push(intervals[index]);
index++;
}
// [4,7] 出现重叠的区域,相比下取其中的最小值以及最大值 [5, 8]
while(index < size && intervals[index][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[index][0]);
newInterval[1] = Math.max(newInterval[1], intervals[index][1]);
index++;
}
res.push(newInterval);
// 剩下的说明都比新的区间值大了且不覆盖了
while(index < size) {
res.push(intervals[index]);
index++;
}
return res;
}