力扣 452. 用最少数量的箭引爆气球

力扣 452. 用最少数量的箭引爆气球

这道题通过画图分析,得知当两个气球有重叠部分,可以通过在重叠部分射箭刺破气球,但是在代码的操作中可以通过result计数来记录需要的箭的数量,具体的操作是在遇到不重叠的两个气球时result++,值得注意的地方是,应该从数组的最左边开始,每两个相邻的气球计算一次是否需要箭,这样是局部最优,并且通过这个局部最优可以推导出全局最优。

具体代码如下

class Solution {
    public int findMinArrowShots(int[][] points) {
        if(points.length==0)return 0;
        // 用Integer内置的比较方法,否则会溢出。
        Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
        int result=1;
        for(int i=1; i<points.length; i++){
            if(points[i][0]>points[i-1][1]){
                result++;
            } else{
                points[i][1]=Math.min(points[i-1][1], points[i][1]);
            }
        }
        return result;
    }
}

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注