我的力扣算法452-用最少数量的箭引爆气球

ok
看题:
1
2
在这里插入图片描述
ok,其实题目还是挺好理解的,就是在一个水平区域内,会有很多的气球,这个气球会有横向的坐标。表明该气球在哪个坐标开始到哪个坐标结束,但是因为给出的坐标可以重叠的缘故,气球之间也会重叠起来,而你要在x轴上射箭,如果方法得当,你可以用一根箭射穿重叠的气球,我们需要最少的射箭数。
看代码:

class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        if(points.empty()){
            return 0;
        }//这里判断这个区域到底有没有气球,没有气球就不需要射箭
        sort(points.begin(),points.end(),[](const vector<int>&u,const vector<int>&v){
            return u[1]<v[1];
        });//重写排序算法,按照每个气球的结束坐标从小到大排序,目的是为了之后在逻辑中找到重叠的部分
        int x=points[0][1];//初始化,找到第一个结束的气球的结束坐标
        int ans=1;//计数器,因为排除了空的情况,所以至少射一发
        for(const vector<int> t:points){//遍历气球数组
            if(t[0]>x){//如果一个气球的开始坐标大于了初始化结束坐标,说明这个两个气球没有缘分
            //没有重叠在一起的部分,所以,就加一个射箭数,并且把当前气球的结束坐标作为比较值
            //继续找下一个没有缘分的气球。
                ans++;
                x=t[1];
            }
        }
        return ans;
    }
};

ok,就是这样,最开始想用bfs来做,应该可以做出来,但是感觉会很麻烦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值