leetcode 452. 用最少数量的箭引爆气球 中等 贪心

题目:
在这里插入图片描述
分析:发现这个问题和另一个使用贪心的经典问题很像,活动场地安排的问题(如何在一个场地安排最多的活动),同样给出了“开始”和“结束”,活动场地安排问题给出的是每个活动的开始和结束时间,这个问题是给出了每个气球的开始和结束位置,想到这里思路就出来了,如果按结束排好了序,那么取开始比结束小的,就归为一支箭可以解决,否则要加一支箭(活动场地安排问题则是按结束排好序,从第一个活动开始,然后后续都选第一个开始比目前结束大的)

代码:

class Solution {
    public int findMinArrowShots(int[][] points) {
        if(points.length == 0 || points == null){
            return 0;
        }
        Arrays.sort(points, new pointsComparator());
        //已排序
        int end = points[0][1];
        int arrow = 1;
        for(int i = 0; i < points.length; i++){
            if(points[i][0] > end){
                arrow++;
                end = points[i][1];
            }
        }
        return arrow;
    }
}

class pointsComparator implements Comparator<int[]>{
    @Override
    public int compare(int[] point1, int[] point2){
        if(point1[1] < point2[1]){
            return -1;
        }else if(point1[1] > point2[1]){
            return 1;
        }else{
            return 0;
        }
    }
}

因为要自定义按结束排序,所以需要自定义一个Comparator

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值