forked from neetcode-gh/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
56-Merge-Intervals.js
33 lines (27 loc) · 803 Bytes
/
56-Merge-Intervals.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
/**
* https://leetcode.com/problems/merge-intervals/
* Time O(N * logN) | Space O(N)
* @param {number[][]} intervals
* @return {number[][]}
*/
var merge = function (intervals) {
intervals.sort(([aStart, aEnd], [bStart, bEnd]) =>
aStart !== bStart ? aStart - bStart : aEnd - bEnd
);
return mergerInterval(intervals);
};
const mergerInterval = (intervals, merged = []) => {
let prev = intervals.shift();
for (const curr of intervals) {
const [prevStart, prevEnd] = prev;
const [currStart, currEnd] = curr;
const hasOverlap = currStart <= prevEnd;
if (hasOverlap) {
prev[1] = Math.max(prev[1], curr[1]);
continue;
}
merged.push(prev);
prev = curr;
}
return [...merged, prev];
};