给出一组区间数组 intervals = [[start1,end1],[start2,end2]...],合并所有重叠区间,返回不重叠、有序的区间列表。
示例
输入:
[[10,30],[20,60],[80,100],[150,180]]
输出:
[[10,60],[80,100],[150,180]]
输入:
[[1,3],[2,6],[8,10],[15,18]]
输出:
[[1,6],[8,10],[15,18]]
核心思路
- 按区间左端点升序排序,保证从左到右遍历;
- 新建结果数组,先放入第一个区间作为基准;
- 遍历剩余每个区间,取出结果数组最后一个区间:
- 如果当前区间左端点 ≤ 最后区间右端点 → 重叠,合并(更新右端为两者最大值)
- 不重叠 → 直接推入结果数组
function merge(intervals){
intervals.sort((a,b)=>a[0]-b[0]);
const newBox = [intervals[0]];
for(let i=1;i<intervals.length;i++){
const curr = intervals[i];
const last = newBox[newBox.length-1];
if(curr[0] <= last[1]){
last[1] = Math.max(last[1], curr[1]);
}else{
newBox.push(curr)
}
}
return newBox;
}
//输入:[[10,30],[20,60],[80,100],[150,180]]
//输出:[[10,60],[80,100],[150,180]]
const res = merge([[10,30],[20,60],[80,100],[150,180]]);
console.log(res);




