js如何验证多组区间是否重叠
在JavaScript中验证多组区间是否重叠,可以通过以下步骤和算法来实现:
步骤:
理解区间重叠的概念:
- 区间重叠指的是如果有两个区间 [a, b] 和 [c, d],它们重叠的条件是存在交集,即 a <= d 并且 c <= b。
排序区间:
- 首先,将所有的区间按照起始端点进行排序。如果起始端点相同,则可以按照结束端点排序,但通常按照起始端点排序即可。
迭代检查重叠:
- 从第一个区间开始,依次与下一个区间比较,检查是否有重叠。如果当前区间与下一个区间重叠,则合并这两个区间(更新结束端点),继续检查下一个区间。
- 如果当前区间与下一个区间不重叠,则将当前区间添加到结果列表中,更新当前区间为下一个区间,继续检查下一个区间。
最终结果:
- 迭代完成后,得到的结果列表即为没有重叠的区间集合。
JavaScript 实现示例:
javascriptfunction mergeIntervals(intervals) {
// 如果区间为空或者只有一个区间,直接返回
if (intervals.length <= 1) {
return intervals;
}
// 按照起始端点进行排序
intervals.sort((a, b) => a[0] - b[0]);
let merged = [intervals[0]]; // 存放合并后的区间结果
for (let i = 1; i < intervals.length; i++) {
let current = merged[merged.length - 1]; // 当前已合并的最后一个区间
let next = intervals[i];
// 如果当前区间与下一个区间重叠,则合并区间
if (current[1] >= next[0]) {
current[1] = Math.max(current[1], next[1]); // 更新当前区间的结束端点
} else {
merged.push(next); // 不重叠,将下一个区间加入结果列表
}
}
return merged;
}
// 示例用法
let intervals = [[1, 3], [2, 6], [8, 10], [15, 18]];
let mergedIntervals = mergeIntervals(intervals);
console.log(mergedIntervals); // 输出 [[1, 6], [8, 10], [15, 18]]
解释:
mergeIntervals
函数接受一个二维数组intervals
,每个子数组表示一个区间。- 首先对区间数组按照起始端点排序。
- 使用
merged
数组来存放合并后的区间结果。 - 迭代排序后的区间数组,比较当前区间与下一个区间是否重叠,根据情况合并或者加入结果数组。
- 最后返回合并后的结果数组
merged
。
这种方法的时间复杂度主要取决于排序步骤,为 O(n log n),其中 n 是区间的个数。迭代检查重叠的步骤是线性的,为 O(n)。