Menu
CoddyTech

Non-overlapping Intervals

中等区间贪心python iconjava iconcpp iconc iconjs icon+10

区间 i 从 starts[i] 延伸到 ends[i]。返回你必须移除的最少区间数,使剩下的区间两两不重叠。两个区间如果只是相接,也就是一个区间结束的时刻恰好是另一个区间开始的时刻,则它们不重叠。

函数

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
每个区间的起点
endsinteger-array
每个区间的末尾,索引与其起点相同
返回值integer
需要移除的最少区间数,使剩余区间互不重叠

约束条件

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • 这些区间未排序。两个区间可能完全相同。

示例

输入
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
输出
2
解释
按开始时间排序,区间依次为 [1,4]、[2,3]、[3,6] 和 [5,7]。保留仅相接的 [2,3] 和 [3,6],移除另外 2 个区间。不能保留 3 个区间:[1,4] 与 [2,3] 重叠,[3,6] 与 [5,7] 重叠。
challenge icon

进阶

假设每个区间都有一个值,而你想在互不重叠的区间中选出总值最大的组合。保留结束最早的区间仍然有效吗?

重置代码
def eraseOverlapIntervals(starts, ends):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

starts = [3, 1, 5, 2]
ends = [6, 4, 7, 3]

预期输出

2