435.Leetcode 贪心算法之区间调度问题

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

注意:

可以认为区间的终点总是大于它的起点。区间 [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 就是最⼤不相交⼦集。
 

你可能感兴趣的:(Leetcode)