452. 用最少数量的箭引爆气球
1. 按数组右端从小到大进行排序
2. 从小到大遍历数组,if(points[i][0]>points[i-1][1]),(气球i和气球i-1不挨着),需要一支箭,并更新右侧位置
右端排序模板:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.size()<=1) return points.size();
sort(points.begin(),points.end(),[](const vector<int>& u,const vector<int>& v){
return u[1]<v[1];
});
int pos=points[0][1];
int ans=1;
for(const vector<int>& balloon:points){
//第i个数组左端点大于发射点(即pos)
if(balloon[0]>pos){
//修改pos为第i个数组右端点
//结果加一
pos=balloon[1];
++ans;
}
}
/*或者
for (int i = 1; i < points.size(); i++) {
if (points[i][0] > pos) {
pos = points[i][1];
++arrows;
}
}
*/
return ans;
}