56,合并区间
题目描述
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
题解
思路:
思路:
1,先对数组的第一个值进行排序
2,声明一个额外变量,去保存当前的结果
代码:
var merge = function(intervals) {
// 按照数组的第一个值进行排序
intervals.sort((a, b) => a[0] - b[0])
let temp = intervals[0], res = []
// 遍历数组中的每一个值
for(let i = 1;i < intervals.length;i++){
let curr = intervals[i]
// 如果两个数组有重叠的话
if(temp[1] >= curr[0]){
// 再判断一下两个数组之间是否是包含关系
temp = temp[1] > curr[1] ? temp : [temp[0], curr[1]]
}else{
// 如果没有重叠,那么就可以保存结果
res.push(temp)
temp = curr
}
}
// 将最后剩余的数组进行保存
res.push(temp)
return res
};