区间合并
区间合并(Merge Intervals)是一个常见的前端面试题,通常涉及到对一组区间进行合并,使得不重叠的区间合并成一个新的区间。这类问题可以用于处理日程安排、时间区间的操作等。下面是一个典型的区间合并问题:
问题描述
给定一个包含多个区间的数组 intervals
,每个区间由两个整数 start
和 end
组成,表示区间的开始和结束。合并所有重叠的区间,并返回合并后的数组。
示例
输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3]
和 [2,6]
重叠,合并成 [1,6]
。
解决方法
一种解决这个问题的方法是先将区间按照起始位置排序,然后遍历排序后的区间数组,依次合并重叠的区间。具体步骤如下:
- 将区间数组按照起始位置从小到大排序。
- 初始化一个空数组
result
用于存储合并后的区间。 - 遍历排序后的区间数组,如果当前区间的起始位置大于
result
数组中最后一个区间的结束位置,说明不重叠,直接将当前区间加入result
数组。如果重叠,更新result
数组中最后一个区间的结束位置为当前区间的结束位置。 - 返回
result
数组作为结果。
下面是一个 JavaScript 的实现例子:
function merge(intervals) {
if (intervals.length <= 1) {
return intervals;
}
intervals.sort((a, b) => a[0] - b[0]);
let result = [intervals[0]];
for (let i = 1; i < intervals.length; i++) {
let currentInterval = intervals[i];
let lastInterval = result[result.length - 1];
if (currentInterval[0] <= lastInterval[1]) {
lastInterval[1] = Math.max(lastInterval[1], currentInterval[1]);
} else {
result.push(currentInterval);
}
}
return result;
}
// 示例用法
let intervals = [
[1, 3],
[2, 6],
[8, 10],
[15, 18]
];
let mergedIntervals = merge(intervals);
console.log(mergedIntervals); // 输出 [[1,6],[8,10],[15,18]]