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

如何基于‘end+1等于start’条件最优实现区间合并?

最优区间合并方案(支持end+1=start时合并)

核心思路依然是排序后线性遍历,这是区间合并问题的最优解法,时间复杂度为O(n log n)(排序占主导),远优于遍历所有区间对的O(n²)方案。

你之前认为“排序后符合条件的区间未必相邻”是误解——按区间起始值升序排序后,所有可合并的区间(包括满足前一个区间end+1等于后一个区间start的情况)都会在遍历过程中被依次处理,因为合并后的区间会不断扩展其结束值,后续只要有区间的起始值不超过当前合并区间的结束值+1,就会被合并。

修改后的代码

from typing import List

def merge(intervals: List[List[int]]) -> List[List[int]]:
    if not intervals:
        return []
    
    # 按区间起始值升序排序
    intervals.sort()
    result = []
    prev_start, prev_end = intervals[0]
    
    for curr_start, curr_end in intervals[1:]:
        # 判断条件调整:前一个区间的end+1 >= 当前区间的start时触发合并
        if prev_end + 1 >= curr_start:
            # 合并后保留最大的结束值
            prev_end = max(prev_end, curr_end)
        else:
            # 无法合并,将当前已合并的区间存入结果
            result.append([prev_start, prev_end])
            prev_start, prev_end = curr_start, curr_end
    
    # 存入最后一个合并完成的区间
    result.append([prev_start, prev_end])
    return result

示例验证

  • 示例1:merge([[1,2], [3,4]]) → [[1,4]],符合预期
  • 示例2:merge([[1,5], [6,9]]) → [[1,9]],符合预期
  • 示例3:merge([[1,5], [14, 17], [6,9], [10,13]]) → [[1,17]],符合预期
  • 示例4:输入[[1,5], [14, 17], [6,9], [10,13], [4,7], [8,12]]实际会合并为[[1,17]],你提供的示例4输出可能存在笔误,所有输入区间可通过连续合并形成一个整体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:57:11