57. Insert Interval

113 阅读1分钟

57. Insert Interval

non-overlappint 不覆盖的意思是指,两个数组区间没有出现覆盖例如 [[1,2], [3,4]]non-overlapping的,但是[[1,3], [2,4]]重复覆盖了2overlapping的 那么给出的 newInterval无非是三种情况

  1. 对于绝对小于 newInterval 区间的情况即 intervals[index][1] < newInterval[0]
  2. 对于出现重叠了 newInterval 区间的情况需要去除重叠即 intervals[index][0] <= newInterval[1]
  3. 那么剩余的都是大于 newInterval 区间的情况

解题思路

  1. 设置指针 size 即 intervals.length即终止条件,index 即已经push进结果 res 的数组
  2. 对于绝对小于的情况 intervals[index][1] < newInterval[0] ,直接 push 进 res
  3. 对于出现覆盖的 intervals[index][0] <= newInterval[1],取相对最小值,以及相对最大值
  4. 剩下的都是大于新区间的值了直接 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;
}