js实现,求各个时间段的最大交集
时间: 2024-10-27 19:11:25 浏览: 13
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
在JavaScript中,求解各个时间段(如`[[a1, b1], [a2, b2], ..., [an, bn]]`)的最大交集问题通常涉及到计算这些区间是否有重叠,并找出最大的重叠部分。这里可以使用一种叫做“分治法”的策略,或者更常见的是“归并区间”(Merge Intervals)的方法。下面是一个简单的示例:
```javascript
function maxIntersection(intervals) {
intervals.sort((a, b) => a[0] - b[0]); // 按起始时间排序
let mergedIntervals = []; // 存储合并后的区间
let currentStart = intervals[0][0]; // 当前区间的起点
let maxLength = 0; // 最大交集长度
for (let i = 1; i < intervals.length; i++) {
const [intervalStart, intervalEnd] = intervals[i];
if (intervalStart <= currentStart + maxLength) { // 如果有交集
currentStart = Math.min(currentStart, intervalStart); // 合并区间
maxLength = Math.max(maxLength, intervalEnd - currentStart); // 更新最大交集长度
} else { // 区间无交集,结束当前区间并开始新的
mergedIntervals.push([currentStart, currentStart + maxLength]);
currentStart = intervalStart;
maxLength = intervalEnd - intervalStart;
}
}
// 结束最后一个区间
mergedIntervals.push([currentStart, currentStart + maxLength]);
return mergedIntervals;
}
// 示例:
const intervals = [[1, 4], [2, 6], [8, 9]];
console.log(maxIntersection(intervals)); // 输出: [[1, 6]]
```
上述代码首先对区间按照起始时间排序,然后遍历每个区间,判断是否与当前活跃区间有交集。如果有,则更新交集;如果没有,则记录当前区间并开始处理下一个。
阅读全文