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

题目:

有一些球形气球贴在一堵用 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会有例子溢出

相关推荐
CS创新实验室13 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算
海石15 小时前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode
海石15 小时前
1400分的dp汗流浃背之【交替子数组计数】
算法·leetcode
奋发向前wcx15 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先
imbackneverdie16 小时前
AI4S不止于分子药物:以MedPeer为代表的科研基建打开产业新增量
大数据·人工智能·算法·aigc·科研·学术·ai 4s
额鹅恶饿呃17 小时前
C语言中的数据结构和变量
c语言·数据结构·算法
运行时记录18 小时前
prompt-optimizer skill
算法
万法若空18 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
退休倒计时18 小时前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript
学逆向的19 小时前
汇编——内存
开发语言·汇编·算法·网络安全