LC 435贪心中等第 69 / 95 题

无重叠区间

Non-overlapping Intervals

贪心区间调度
本机进度仅保存在当前浏览器

题目描述

给定一个区间的集合 intervals,其中 intervals[i] = [starti, endi]。返回需要移除区间的最小数量,使剩余区间互不重叠(端点相触不算重叠)。

示例:intervals = [[1, 2], [2, 3], [3, 4], [1, 3]],移除 [1, 3] 后无重叠,输出 1。

解题思路

  1. 等价转换:最小移除数 = 总数 - 最多能保留的互不重叠区间数,这是经典区间调度问题。
  2. 贪心策略:按右端点升序排列,每次选右端点最小的区间保留,给后面留出最大空间。
  3. 扫描时若当前区间左端点 >= 已保留区间的最大右端点则保留,否则计入移除。

参考实现

查看参考实现Python · 建议先自行作答
def eraseOverlapIntervals(intervals):
    intervals.sort(key=lambda x: x[1])
    keep = 0
    end = float('-inf')
    for start, e in intervals:
        # 右端点最小者优先保留
        if start >= end:
            keep += 1
            end = e
    return len(intervals) - keep

复杂度与归属

时间复杂度O(n log n)
空间复杂度O(log n)
所属分类贪心
题源LeetCode 435

关联教程

返回题图鉴