1 /**
2 * @param {number[][]} intervals
3 * @param {number[]} newInterval
4 * @return {number[][]}
5 */
6 var insert = function (intervals, newInterval) {
7 const ll = intervals.length;
8 const ans = []
9 for (let i = 0; i < ll; i++) {
10 //区间整体位于右侧
11 if (intervals[i][1] < newInterval[0]) {
12 ans.push(intervals[i])
13 continue
14 }
15 //区间整体位于左侧
16 if (intervals[i][0] > newInterval[1]) {
17 ans.push(newInterval, ...intervals.slice(i, ll))
18 return ans;
19 }
20 //被包含
21 if (intervals[i][1] > newInterval[1] && intervals[i][0] < newInterval[0]) {
22 return intervals
23 }
24 //左交叉 右交叉 或者 包含
25 newInterval[0] = Math.min(intervals[i][0], newInterval[0])
26 for (let j = i; j < ll; j++) {
27 if (intervals[j][0] > newInterval[1]) {
28 ans.push(newInterval, ...intervals.slice(j, ll))
29 return ans
30
31 } else if (intervals[j][1] >= newInterval[1]) {
32 newInterval[1] = intervals[j][1]
33 ans.push(newInterval, ...intervals.slice(j + 1, ll))
34 return ans
35
36 }
37 }
38 ans.push(newInterval)
39 return ans;
40 }
41
42 return [...intervals, newInterval]
43 };