思路
- 按左边界的大小排序
- 开辟一个结果数组保存结果,遍历原始区间数组,将每一项(interval)与结果数组的最后一项(last)比较,如果 interval 左边界小于 last 的右边界,说明有重合,进行合并;否则,将 interval 直接加到结果数组最后一项
var merge = function (intervals) {
const res = [];
intervals.sort((a, b) => a[0] - b[0]);
res.push(intervals[0]);
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] > res[res.length - 1][1]) {
res.push(intervals[i]);
} else {
const tmp = res.pop();
res.push([tmp[0], Math.max(tmp[1], intervals[i][1])]);
}
}
return res;
};