原文链接:点我跳转
思路
排序+贪心
解题过程
首先对气球的由小到大排序,然后我们考虑引爆最左边的第一个气球。这个时候,我们贪心地引爆尽可能多的气球,即对第一个气球的往后进行遍历,寻找到可能引爆数量的最大值。
具体来说,有两种情况:
1. cur<points[i][0]
这个时候说明不管怎么样都无法引爆更多的气球,我们结束当前引爆序列;
2.cur>points[i][1]
这个时候我们想要引爆第i个气球,必须保证i的右端最大值满足,所以我们重置cur为当前的。
复杂度
- 时间复杂度: O(nlogN)
- 空间复杂度: O(1)
代码
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(),points.end());
int res=0;
int cur = points[0][1];
for(int i=1;i<points.size();i++)
{
if(cur<points[i][0])//结束当前序列
{
cur = points[i][1];
res++;
}
else if(cur>points[i][1])//重置cur为当前最小值
{
cur = points[i][1];
}
}
return res+1;
}
};