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

排序 + 贪心

  • 思路:
    • 将数组元素按照右边界进行排序;
    • 第一支箭从第一个气球的右边界 pos 射出,如果下一个气球的左边界比 pos 要大,则这个气球不会被这支箭射中,否则会被射中(因为排过序 pos ∈ [left, right]);
    • 如果射不中,需要下一支箭,同时将 pos 更新为这个气球的 right;
class Solution {
public:
    int findMinArrowShots(vector>& points) {
        if (points.empty()) {
            return 0;
        }

        std::sort(points.begin(), points.end(), [](const std::vector& u, const std::vector& v) {
            return u[1] < v[1];
        });

        int pos = points[0][1];
        int count = 1;
        for (const vector& q: points) {
            if (q[0] > pos) {
                pos = q[1];
                ++count;
            }
        }

        return count;
    }
};

你可能感兴趣的:(力扣实践,leetcode,算法,职场和发展)