-
Notifications
You must be signed in to change notification settings - Fork 0
/
0057. Insert Interval.js
50 lines (44 loc) · 1.56 KB
/
0057. Insert Interval.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
// You may assume that the intervals were initially sorted according to their start times.
// Example 1:
// Input: intervals = [[1, 3], [6, 9]], newInterval = [2, 5]
// Output: [[1, 5], [6, 9]]
// Example 2:
// Input: intervals = [[1, 2], [3, 5], [6, 7], [8, 10], [12, 16]], newInterval = [4, 8]
// Output: [[1, 2], [3, 10], [12, 16]]
// Explanation: Because the new interval[4, 8] overlaps with [3, 5], [6, 7], [8, 10].
// NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
/**
* @param {number[][]} intervals
* @param {number[]} newInterval
* @return {number[][]}
*/
const insert = (intervals, newInterval) => {
if (!newInterval.length) {
return [newInterval]
}
let res = []
let flag = 0
let i
for (i = 0; i < intervals.length; i++) {
let interval = intervals[i]
if (newInterval[0] > interval[1]) {
res.push(interval)
} else if (newInterval[1] < interval[0]) {
res.push(newInterval)
flag = 1
break
} else {
newInterval[0] = Math.min(newInterval[0], interval[0])
newInterval[1] = Math.max(newInterval[1], interval[1])
}
}
if (flag === 0) {
res.push(newInterval)
} else {
res = res.concat(intervals.splice(i))
}
return res
}
// Runtime: 56 ms, faster than 97.24 % of JavaScript online submissions for Insert Interval.
// Memory Usage: 36.7 MB, less than 87.50 % of JavaScript online submissions for Insert Interval.