• 力扣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
  • 相关阅读:
    docker安装mtproto及报错解决方案
    Centos7下创建和管理用户
    GitHub项目绑定自己的域名
    navicate远程连接mysql8.0失败
    Java反射
    Spring AOP
    Spring注解
    学习进度笔记20
    学习进度笔记19
    学习进度笔记18
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/14891243.html
Copyright © 2020-2023  润新知