Minimum Number of Arrows to Burst Balloons-面试题

题目内容:

  • 在二维空间中存在许多气球,对于每个气球提供水平直径的起始坐标Xstart和结束坐标Xend,因为是水平的,纵坐标并不重要。开始坐标总是比结束坐标要小。
  • 一个箭头可以从x轴的不同点垂直向上射,如果Xstart<=X<=Xend,则气球会被刺破。求解最小的箭头数目可以使得所有的气球都被刺破。
  • Example:Input:[[10,16], [2,8], [1,6], [7,12] Output:2

题目分析

  • 从左往右投射飞镖,保证本次投飞镖能够刺破最多的气球
  • 左边的气球都被刺破,才能进行下一次投射
  • 算法使用:贪心算法

java编程

class Solution {
    public int findMinArrowShots(int[][] points) {
        if(points.length==0)return 0;//气球数目为0时返回0
        Arrays.sort(points,(a,b)->(a[1]-b[1]));//按照Xend值的大小从左往右进行排序
        int count = 1;//count值为需要的箭头数目,初始值为1
        int k = points[0][1];//将最左边的气球的Xend作为首个标记值
        for(int i = 1;i<points.length;i++){//从第二个气球开始到最后一个气球
            if(points[i][0]<=k)
                continue; //如果后面的气球的Xstart值小于标记值,则一个箭头就可以将标记值前面的气球全部刺破
            else{
                count++;//否则的话表示标记值前面的气球已经被刺破,需要增加剪头数目
                k = points[i][1];//标记值更换为未被刺破的第一个气球的Xend值
            }
        }
        return count; //返回最后的气球数目
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值