给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:
可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
示例 1:
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。
class Solution:
def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
if(len(intervals)==0):
return 0
intervals.sort(key=lambda x:x[1])
x=intervals[0][1]
count=1
for inter in intervals:
start = inter[0]
if start>=x:
count+=1
x = inter[1]
return len(intervals)-count
话不多说。先上代码,这个应该能看明白哈,hhh,贪心算法之区间调度问题,直接初始位置选择第一个区间的结束时间点
大佬原话:
1、从区间集合 intvs 中选择⼀个区间 x, 这个 x 是在当前所有区间中结束最早的(end 最⼩) 。
2. 把所有与 x 区间相交的区间从区间集合 intvs 中删除。
3. 重复步骤 1 和 2, 直到 intvs 为空为⽌。 之前选出的那些 x 就是最⼤不相交⼦集。
区间调度说明 : https://blog.csdn.net/yutianzuijin/article/details/78897604