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

Posted 我要出家当道士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了452.用最少数量的箭引爆气球相关的知识,希望对你有一定的参考价值。

目录

1、Question

2、Analysis

 3、Code


1、Question

2、Analysis

        射箭肯定射击气球重叠最多的地方最优,那么反过来就是求存在多少完全不重叠的区域。重叠的区域一支箭就可以了,这题的答案就是独立的重叠的区域数量。

        先将气球的区间按右边界正序排序,以右边界作为重叠区域的边界。那么只存在以下三种情况,首先第一种情况不会出现,所有不作考虑;第二种情况,有与当前区域重叠,可以复用一支箭,所以也不作考虑;需要考虑第三种情况,此时该区间超出重叠区域,说明出现了新的区域,此时需要新的箭进行新区域的射击。

 3、Code

class Solution 
public:

    bool static compare(vector<int> &a, vector<int> &b)
    
        return a[1] < b[1];
    

    int findMinArrowShots(vector<vector<int>> &points)
    
        int size = points.size();
        // 按右边界排序
        sort(points.begin(), points.end(), compare);
        // 首先确定第一个重叠区域
        int flag = points[0][1];
        int nums = 1;
        for (int i = 1; i < size; i++)
        
            // 出现新的重叠区域,需要新的箭支,并更新新的区域的右边界。
            if (points[i][0] > flag)
            
                flag = points[i][1];
                nums++;
            
        
        return nums;
    

;

以上是关于452.用最少数量的箭引爆气球的主要内容,如果未能解决你的问题,请参考以下文章

贪心452. 用最少数量的箭引爆气球

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

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

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

452. 用最少数量的箭引爆气球-贪心算法-Comparator比较器使用

Leetcode刷题100天—452. 用最少数量的箭引爆气球(贪心)—day38