贪心算法---用最少数量的箭引爆气球

题目:

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstartxend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 x``startx``end, 且满足 xstart ≤ x ≤ x``end,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points返回引爆所有气球所必须射出的 最小 弓箭数

思路:

将point数组按照左边界从小到大进行排序,如果正在遍历的气球与它前一个气球挨着,则将该气球的右边界更新为这两个气球的最小右边界,也就是箭射中的位置。如果正在遍历的气球与它前一个气球不挨着,那么箭数需要增加。

代码:

java 复制代码
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points,(a,b)->Integer.compare(a[0]-b[0]));//将point按照左边界从小到大排序
        int count=1;//箭的数量,至少一只
        for(int i=1;i<points.length;i++){
            if(points[i][0]>points[i-1][1]){//两个气球不重叠不挨着需要一箭
                count++;
            }
            else{
                points[i][1]=Math.min(points[i][1],points[i-1][1]);//两个气球挨着,更新重叠气球最小右边界,也就是剑射出的位置
            }
        }
        return count;
    }

注意:排序时使用Integer内置的compare方法不会溢出。使用return a0-b0会有例子溢出

相关推荐
JieE2128 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack2016 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树18 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2121 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架