题目链接
https://leetcode.com/problems/non-overlapping-intervals/
题目描述
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。认为区间的终点总是大于它的起点,并且认为[1,2]和[2,3]的边界相互“接触”,但没有相互重叠。
示例
输入:[[1,2],[2,3],[3,4],[1,3]]
输出:1
移除[1,3]后,剩下的区间没有重叠。
解题思路
在适合用贪心算法解决的问题中,每一步都做出局部最优的选择,最终的结果是全局最优。找到移除区间的最小数量等价于要保留尽可能多的不重叠区间。首先将区间集合按照区间结束的早晚排序。我们采取的贪心策略为:
(1)每次在区间集合中选取结束最早的区间x。
(2)将所有和x区间相重叠的区间都从区间集合中移除。
由于列表已经按照结束时间早晚排好序,那么在遍历过程中,如何判断一个新区间(已知结束时间比x区间晚)是否和当前x区间[start_x,end_x]重叠呢?如果某区间的起始start小于x区间的end_x,那么该区间和x一定是重叠的。(注意这种判断是在新区间的结束时间比x区间晚的基础上做出的,即序列按照结束