LeetCode 452. 用最少数量的箭引爆气球 java题解

https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/description/

java 复制代码
class Solution {
    public int findMinArrowShots(int[][] points) {
        //按区间起点排序
        Arrays.sort(points,new Comparator<int[]>(){
            public int compare(int[] a,int[] b){
                return a[0]-b[0];
            }
        });
        int len=points.length;
        if(len==1) return 1;
        int[] before=points[0];//第一个区间
        int count=1;
        for(int i=1;i<len;i++){
            //如果区间重叠
            if(points[i][0]>=before[0]&&points[i][0]<=before[1]){
                int[] cur=new int[2];
                cur[0]=Math.max(points[i][0],before[0]);
                cur[1]=Math.min(points[i][1],before[1]);
                before=cur;
            }
            else{//区间不重叠
                count++;//需要加一支箭
                before=points[i];
            }
        }
        return count;
    }
}
/**
ab两个区间有重叠的部分,ab两个区间合并后就只剩下重叠的部分。
 */

更简洁的别人的写法

java 复制代码
/**
 * 时间复杂度 : O(NlogN)  排序需要 O(NlogN) 的复杂度
 * 空间复杂度 : O(logN) java所使用的内置函数用的是快速排序需要 logN 的空间
 */
class Solution {
    public int findMinArrowShots(int[][] points) {
        // 根据气球直径的开始坐标从小到大排序
        // 使用Integer内置比较方法,不会溢出
        Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));

        int count = 1;  // points 不为空至少需要一支箭
        for (int i = 1; i < points.length; i++) {
            if (points[i][0] > points[i - 1][1]) {  // 气球i和气球i-1不挨着,注意这里不是>=
                count++; // 需要一支箭
            } else {  // 气球i和气球i-1挨着
                points[i][1] = Math.min(points[i][1], points[i - 1][1]); // 更新重叠气球最小右边界
            }
        }
        return count;
    }
}
相关推荐
SamDeepThinking3 小时前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
vivo互联网技术3 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
朕瞧着你甚好4 小时前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
浮生望4 小时前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰4 小时前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
MacroZheng5 小时前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端
SamDeepThinking5 小时前
函数式编程:用BiFunction消除多类型分支的代码重复
java·后端·面试
地平线开发者15 小时前
J6B vio scenario sample
算法
Flittly1 天前
【AgentScope Java新手村系列】(16)从RAG到多路检索
java·spring boot·spring