力扣435题(区间调度问题)

435、无重叠区间

基本思想:

贪心算法

具体实现:

A、求出有几个区间不会重叠

     1、区间集合中选择一个区间x,x是当前所有区间结束最早的 ,end最小

      2、与x相交的区间都去掉

             与x相交的区间的start都小于x的end

      3、重复步骤1,2,知道区间为空

B、区间大小-上述结果

代码:

class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        if not intervals:
            return 0
        
        intervals.sort(key=lambda x: x[1])
        n = len(intervals)
        end = intervals[0][1]
        ans = 1

        for i in range(1, n):
            if intervals[i][0] >= end:
                ans += 1
                end = intervals[i][1]
        
        return n - ans

452、用最少的箭头射爆气球

基本思想:

同上

具体实现:

上一题擦边也不算重叠,这一题擦边算重叠

[1,2][2,3]算重叠

改一下判断条件就可以了

代码:

class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        if not points:
            return 0
        
        points.sort(key=lambda balloon: balloon[1])
        end = points[0][1]
        ans = 1
        for balloon in points:
            if balloon[0] > end:
                end = balloon[1]
                ans += 1
        
        return ans
原文地址:https://www.cnblogs.com/zhaojiayu/p/14891243.html