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

发布时间:2024年01月13日

排序 + 贪心

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

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

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

        return count;
    }
};

文章来源:https://blog.csdn.net/N_BenBird/article/details/135570619
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。