56. 合并区间
一、思想
二、代码实现
/**
* @param {number[][]} intervals
* @return {number[][]}
*/
var merge = function(intervals) {
// 先按区间左侧进行排序
intervals.sort((a,b) => (a[0]-b[0]));
// pre是第一个区间,cur是当前的区间,res存储最后的结果
let res = [], pre = intervals[0];
// 从第二个区间判断是否重合
for(let i=1;i<intervals.length;i++){
let cur = intervals[i];
// 判断重合,每一次都是针对pre进行的。有两条路,要么重合更新,要么不重合存到最后的结果中,将pre的位置让给下一个区间。
if(cur[0] <= pre[1]){ // 有重合
pre[1] = Math.max(pre[1],cur[1]) // 更新初始区间的右侧即可
}else{
res.push(pre); // 不重合,将初始区间存到最后的结果中
pre = cur; // 更新pre
}
}
// 最后都是要将pre指向的区间存储到最后的结果当中
res.push(pre);
return res;
};