/** * http://leetcode.cn/problems/insert-interval/?envType=study-plan-v2&envId=top-interview-150 * @param {number[][]} intervals * @param {number[]} newInterval * @return {number[][]} */ const insert = function (intervals, newInterval) { }; /* 假设我们插入的区间是[left, right],[start, end]表示当前元素的左右区间,由于intervals的所有区间都是 按照左区间排序的,当end小于left时表明新插入的区间和当前区间没有重合,没必要合并,就把当前区间存入result 如果,当start大于right时表明这两个区间没有重合也不需要合并,其他情况需要合并区间,合并的区间为[min(start,left), max(end, right)] */ function f1(intervals, newInterval) { const result = []; let i = 0; const n = intervals.length; // 1. 插入所有与 newInterval 不重叠的区间 while (i < n && intervals[i][1] < newInterval[0]) { result.push(intervals[i]); i++; } // 2. 合并重叠的区间 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++; } // 3. 将合并后的 newInterval 插入到结果中 result.push(newInterval); // 4. 插入剩余的所有区间 while (i < n) { result.push(intervals[i]); i++; } return result; }