其他分享
首页 > 其他分享> > LeetCode452. 用最少数量的箭引爆气球

LeetCode452. 用最少数量的箭引爆气球

作者:互联网

题目描述

在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。
由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。
一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足  xstart ≤ x ≤ xend,
则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。
给你一个数组 points ,其中 points [i] = [xstart,xend] ,返回引爆所有气球所必须射出的最小弓箭数。

排序+ 贪心

先排序,按照points[1]从小到大排序。
这道题贪心算法体现在,每次选择最小的points[1],然后进行遍历,,
如果不满足points[j]<=points[i],选择当前的 j 值为新的points[1],
为什么可以这么做,因为我们排序好了,所以当前的j就是剩余数组中最小的points[1]
class Solution {
    public int findMinArrowShots(int[][] points) {
        if (points.length == 0) {
            return 0;
        }
        Arrays.sort(points, new Comparator<int[]>() {
            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;
                }
            }
        });
        int pos = points[0][1];
        int ans = 1;
        for (int[] balloon: points) {
            if (balloon[0] > pos) {
                pos = balloon[1];
                ++ans;
            }
        }
        return ans;
    }
}

标签:return,LeetCode452,int,points,坐标,弓箭,引爆,气球
来源: https://blog.csdn.net/liqi299616/article/details/110005959