前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode刷题DAY 38:用最少数量的箭引爆气球

LeetCode刷题DAY 38:用最少数量的箭引爆气球

作者头像
三猫
发布2020-12-02 11:16:57
4030
发布2020-12-02 11:16:57
举报
文章被收录于专栏:机器学习养成记

戳蓝色字关注我们哟!

难度:中等 关键词:贪心算法、排序

⭐️⭐️⭐️

1

题目描述

有一堆交错排列的气球,求至少需要射出多少支箭才能将所有气球扎破。示例如下:

为方便描述,用数组points记录每个气球的两端点位置,points [i] = [xstart,xend]。

2

python实例展示

以三个气球为例,首先我们考虑一下气球排列时会出现的几种情况:

  • 第一个气球和另两个气球都有重合,但是三个气球无重合
  • 三个气球都不重合
  • 三个气球都重合
  • 两个气球重合,但这两个气球与第三个均不重合

由此可知,我们需要判断多个气球间的重合关系,来确认最少需要多少支箭。

思路

step 1: 根据每个气球的左端点,进行排序,并以当前气球的右端点为标杆

step 2: 判断下一个气球与当前气球是否有重叠

step 3: 如果有重叠则将重叠部分的最右端作为标杆;如无重叠则箭头数量加1且以不重叠气球右端点作为标杆

step 4: 重复步骤2、3,直至遍历结束

代码语言:javascript
复制
class Solution:
    def findMinArrowShots(self, points: List[List[int]]) -> int:
        if not points:
            return(0)
        points.sort()       
        
        b = points[0][1]
        nums = 0
        j=1
        while j<len(points):          
            if b>=points[j][0]:
                b = min(points[j][1],b)
            else:
                b = points[j][1]             
                nums+=1
            j+=1
        return(nums+1)

小思考:以上思路是先对左端点进行排序,然后根据右端点进行重叠部分的识别,那如果直接对右端点进行排序是否可以实现呢? 后台回复“气球”获取答案


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习养成记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档