leetcode 452 Minimum Number of Arrows to Burst Balloons(射击气球最小射击手数目)贪心

本文探讨了活动选择问题,特别是会议室选择问题,旨在最大化会议安排数量。通过对比不同排序策略,阐述了为何按结束时间排序更为合理。采用一箭双穿的比喻,形象地解释了算法原理,并提供了C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

思路:

活动选择问题,会议室选择问题开展最多会议数目,其实一一个类型

将开始时间(坐标)和结束时间排序(任选一个就行,我看c++做法里面有按照开始时间排序,本体中是结束时间排序,感觉按照结束时间排序更合理)

将所有的气球按照终止位置排序,开始从前向后扫描。以第一个气球的终止位置为准,只要出现的气球起始位置小于这个气球的终止位置,代表可以一箭使这些气球全部爆炸;当出现一个气球的起始位置大于第一个气球的终止位置时再以这个气球的终止位置为准,找出所有可以再一箭爆炸的所有气球;以此类推

上面这个图是看的刷题班里面给的思路,感觉不是很好,看看图吧理解一下

class Solution {
    public int findMinArrowShots(int[][] points) {
         if(points ==null||points.length==0||points[0].length==0){
             return 0;
         }
        Arrays.sort(points,new Comparator<int[]>() {//右端点排序
            public int compare(int[] a, int[] b){
                return a[1]-b[1];
            }
        });
         //从左往右射击   
        int lastEnd = points[0][1];//题上没说只在第一区间,所以有可能在第二象限
        int minShots=1;
        for(int i=1;i<points.length;i++){
            if(lastEnd<points[i][0]){
                lastEnd=points[i][1];
                minShots++;
            }
        }
        return minShots;
    }
}

注意:

新写的compara函数里面返回序列是

return a[1]-b[1];

这就是说明是按照points二维数组中的行中的第二列(下标是1)进行排序的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值