,

合并区间

给出一组区间数组 intervals = [[start1,end1],[start2,end2]…],合…

给出一组区间数组 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]]

核心思路

  1. 按区间左端点升序排序,保证从左到右遍历;
  2. 新建结果数组,先放入第一个区间作为基准;
  3. 遍历剩余每个区间,取出结果数组最后一个区间:
    • 如果当前区间左端点 ≤ 最后区间右端点 → 重叠,合并(更新右端为两者最大值)
    • 不重叠 → 直接推入结果数组
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);

Previous Post

Next Post

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor