将气球位置按照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;
}
};
本文介绍了一种解决箭射气球问题的有效算法。通过将气球按结束位置排序并检查重叠范围来确定最少所需的箭数。该算法的时间复杂度为O(nlogn)加O(n),适用于需要优化箭的数量以穿透所有气球的应用场景。
208

被折叠的 条评论
为什么被折叠?



