排序 + 贪心
- 思路:
- 将数组元素按照右边界进行排序;
- 第一支箭从第一个气球的右边界 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;}
};