当前位置: 首页 > article >正文

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

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

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两个区间合并后就只剩下重叠的部分。
 */

更简洁的别人的写法

/**
 * 时间复杂度 : 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;
    }
}

在这里插入图片描述


http://www.kler.cn/a/591384.html

相关文章:

  • springboot实现调用百度ocr实现身份识别
  • Joker靶机实战攻略
  • 《大语言模型》学习笔记(三)
  • 【R语言】lm线性回归及输出含义,置信区间,预测,R方,ggplot 拟合直线
  • 如何在前端处理文件上传,避免大文件造成的性能问题?
  • Linux并发程序设计(5):线程的相关操作
  • __str__特殊方法
  • 机器学习——数据清洗(缺失值处理、异常值处理、数据标准化)
  • 【QT:窗口】
  • 我在哪,要去哪
  • LogicFlow介绍
  • 漏洞知识点《一句话木马》
  • 堆(heap)
  • HTML CSS
  • 检查 YAML 文件格式是否正确的命令 yamllint
  • 【Linux】浅谈环境变量和进程地址空间
  • 王者荣耀道具页面爬虫(json格式数据)
  • Rust + WebAssembly 实现康威生命游戏
  • 如何开始搭建一个交易所软件?从规划到上线的完整指南
  • 常用工具: kafka,redis