You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 重叠时间区间顺延调整功能实现问题

区间重叠修正实现方案

核心处理逻辑

  • 第一步:先将所有区间按原始start值升序排序,保证按照时间从早到晚的顺序处理区间
  • 第二步:提前计算每个区间的固定时长duration = end - start,这个值后续不会变更
  • 第三步:遍历排序后的区间,维护上一个处理完成的区间的end值作为当前区间的最早允许开始时间:
    • 若当前区间的原始start大于等于上一个区间的end,说明无重叠,直接保留原始的start和end即可
    • 若当前区间的原始start小于上一个区间的end,说明存在重叠,将当前区间的start调整为上一个区间的end,新的end等于调整后的start加上预先计算的固定时长
  • 第四步:输出处理完成的区间数组即可

注意事项

如果需要严格保留原始数组的元素顺序,不需要按start排序,可以在处理前给每个区间标记原始索引,处理完成后再按原始索引重排即可。

JavaScript 代码实现

function adjustOverlappingIntervals(intervals) {
  // 按原始start升序排序
  const sortedIntervals = [...intervals].sort((a, b) => a.start - b.start);
  const result = [];
  let prevEnd = -Infinity;

  for (const interval of sortedIntervals) {
    // 计算当前区间固定时长
    const duration = interval.end - interval.start;
    let newStart = interval.start;
    // 重叠则调整start
    if (newStart < prevEnd) {
      newStart = prevEnd;
    }
    const newEnd = newStart + duration;
    result.push({
      ...interval,
      start: newStart,
      end: newEnd
    });
    // 更新上一个区间的end值
    prevEnd = newEnd;
  }

  return result;
}

测试验证

输入示例数据:

const input = [
  {key: 'a', start: 0, end: 100},
  {key: 'b', start: 10, end: 30},
  {key: 'c', start: 110, end: 200},
  {key: 'd', start: 300, end: 400},
];
console.log(adjustOverlappingIntervals(input));

输出结果和要求完全一致:

[
  {key: 'a', start: 0, end: 100},
  {key: 'b', start: 100, end: 120},
  {key: 'c', start: 120, end: 210},
  {key: 'd', start: 300, end: 400}
]

内容的提问来源于stack exchange,提问作者Luiz Eduardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:24:05