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

LeetCode无重叠区间问题自定义贪心解法输出错误原因咨询

解法问题分析

核心错误

你的贪心策略逻辑存在错误:该问题的最优贪心选择是重叠时优先保留结束位置更早的区间,而非你采用的「保留长度更短的区间」。只有保留结束更早的区间,才能给后续未遍历的区间留出最大的可用空间,最终实现最少的区间移除次数。

举个简单的反例即可验证:
测试用例 [[1,3], [2,4], [3,5]]

  • 按照你的策略:前两个区间长度相等,你会移除前一个区间[1,3],保留[2,4];后续遍历到[3,5]时和[2,4]重叠,需要再移除一个区间,总移除次数为2。
  • 最优解:移除中间的[2,4],保留前后两个不重叠的区间,总移除次数仅为1。

你的策略在上述场景中做出了错误选择,你提供的测试用例同样存在这类场景,所以最终结果比正确答案多了1。

代码修复方案

只需要修改重叠时的判断逻辑,把比较区间长度改为比较区间的结束位置即可,修改后的完整代码如下:

from typing import List
class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        L = len(intervals)
        if L <= 1:
            return 0
        
        intervals.sort(key = lambda x: (x[0], x[1]))
        prev_idx = 0
        curr_idx = 1
        interval_cnt = 0
        while curr_idx < L:
            # 区间重叠
            if intervals[curr_idx][0] < intervals[prev_idx][1]:
                interval_cnt += 1
                # 保留结束更早的区间,移除结束更晚的
                if intervals[curr_idx][1] < intervals[prev_idx][1]:
                    prev_idx = curr_idx
            else: # 区间不重叠
                prev_idx = curr_idx
            curr_idx += 1
               
        return interval_cnt

用修改后的代码重新运行你的测试用例,就能得到正确结果7。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:03