将气球位置按照end由小到大的顺序排序,如果前后气球的范围有重叠,那么只需要一根箭,排序时间复杂度为O(nlogn),遍历时间复杂度为O(n);
class Solution {
public:
int findMinArrowShots(vector<pair<int, int>>& points)
{
sort(points.begin(),points.end(),comp);
int ans=0;
for(int i=0;i<points.size();)
{
int j=i+1;
while(j<points.size()&&points[j].first<=points[i].second)
j++;
ans++;
i=j;
}
return ans;
}
static bool comp(pair<int,int> A, pair<int,int> B)
{
if(A.second!=B.second)
return A.second<B.second;
if(A.first!=B.first)
return A.first<B.first;
return 1;
}
};