思路
贪心法
希望尽可能射爆叠在一起的气球;
以气球的左边界进行升序排序,再从左到右遍历,遇到有重叠的气球,则让当前气球的有边界与上一个气球的右边界对齐(min
操作);
代码
cpp
class Solution {
private:
static bool compare(vector<int> a, vector<int> b)
{
return a[0] < b[0];
}
public:
int findMinArrowShots(vector<vector<int>>& points) {
int result = 1, i;
if(points.size() == 1)
{
return 1;
}
sort(points.begin(), points.end(), compare);
for(i = 1; i < points.size(); i++)
{
if(points[i][0] > points[i-1][1])
{
result++;
}
else
{
points[i][1] = min(points[i][1], points[i-1][1]);
}
}
return result;
}
};