欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-08 23:15:28
...

题目:
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

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

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

相关标签: 算法