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

贪心,由于一支箭可以取到一个气球的左右端点,因此我们对于每个气球,我们只考虑一维区间的右端点,这样在能射爆当前气球的情况下,有可能能射爆
更多后面的气球。

class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        if(points.size() == 0) {
            return 0;
        }
        sort(points.begin(), points.end(), [&](vector<int> a, vector<int> b) {   // 对区间的右端点进行排序
            if(a[1] != b[1]) {
                return a[1] < b[1];
            }
            return a[0] < b[0];
        });
        int lastArrow = points[0][1];              // lastArrow表示目前最后一支箭的位置,初始为第一个气球的右端点
        int res = 1;
        for(int i = 1; i < points.size(); ++i) { 
            if(points[i][0] > lastArrow) {        // 如果当前气球左端点在lastArrow右边,那最少还要再加一支箭
                ++res;
                lastArrow = points[i][1];         // 更新最后一支箭的位置为当前气球的右端点
            }
        }
        return res;
    }
};
原文地址:https://www.cnblogs.com/linrj/p/13884955.html