-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathMerge.js
32 lines (32 loc) · 980 Bytes
/
Merge.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
"use strict";
exports.__esModule = true;
/**
* 给出一个区间的集合,合并所有重叠的区间。
* @param {number[][]} intervals
* @return {number[][]}
*/
function merge(intervals) {
var result = [];
var len = intervals.length;
if (len === 0) {
return [];
}
// 按照区间开始位置排序
intervals.sort(function (a, b) { return a[0] - b[0]; });
var i = 0;
// 遍历区间
while (i < len) {
var currentLeft = intervals[i][0];
var currentRight = intervals[i][1];
// 向右遍历 只要有起始位置小于前一个结束位置的,证明有重合
while (i < len - 1 && intervals[i + 1][0] <= currentRight) {
i++;
currentRight = Math.max(currentRight, intervals[i][1]);
}
// 向结果中推入一个与后面不会再重合的区间
result.push([currentLeft, currentRight]);
i++;
}
return result;
}
exports.merge = merge;