给出一个区间的集合,请合并所有重叠的区间。
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
思路:
1.将数组按照第一位的大小进行排序(sort方法)
2.创建 新的数组 和 临时空间
3.从 临时空间 和 当前数组cur 进行判断
如果有重合的,将其合并,放入 临时空间 中。
如果没有重合的,将 临时空间 中的数组放入 新建的数组 中。
4.循环第3步
//Combine Array
var merge = function (intervals) {
if (intervals.length === 0) return []
let res = []
intervals.sort((a, b) => a[0] - b[0]) //数组首位排序函数sort
let candidate = intervals[0] //排序后选择第一个数组 (临时空间)
for (let i = 1; i < intervals.length; i++) {
let cur = intervals[i] //从第二个开始取cur
if (candidate[1] >= cur[0]) { // 有重合 能合并
candidate[1] = Math.max(cur[1], candidate[1]) // 左端不变 右端取大的
} else { // 不重合 不能合并
res.push(candidate)
candidate = cur //把cur放进去临时控件
}
}
res.push(candidate)
return res
};
运行相关代码
intervals = [[1, 3],[4, 9],[8, 10],[15, 18]]
console.log(merge(intervals)) //[[1,3],[4,10],[15,18]]