LeetCode 452. Minimum Number of Arrows to Burst Balloons(用最少数量的箭引爆气球)

题目描述:气球在一个水平数轴上摆放,可以重叠,飞镖垂直投向坐标轴,使得路径上的气球都被刺破。求解最小的投飞镖次数使所有气球都被刺破。

  1. 如果最多有 n 个不重叠的区间,那么就至少需要 n 个箭头穿透所有区间
  2. 箭头如果碰到气球的边界气球也会爆炸,所以说相当于区间的边界触碰也算重叠:
  public int findMinArrowShots(int[][] points) {
        if(points.length == 0) return 0;
        //按照end升序排序
        Arrays.sort(points, new Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[1] - b[1];
            }
        });

        //最大不重叠区间个数
        int count = 1;
        int end = points[0][1];
        for(int i = 1; i < points.length; i ++) {
            //端点相交,算重合区间
            if(points[i][0] > end) {
                count ++;
                end = points[i][1];
            }
        }

        return count;
    }

图片摘自题解:
在这里插入图片描述
在这里插入图片描述

发布了581 篇原创文章 · 获赞 97 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/104898616
今日推荐