力扣leetcode 每日一题 452. 用最少数量的箭引爆气球
程序员文章站
2022-03-06 08:21:29
...
class Solution {
public:
static bool cmp(vector<int>a,vector<int>b){
return a[1]<b[1];
}
int findMinArrowShots(vector<vector<int>>& points) {
if(points.size()<=1){//排除了空数组和数组值只有一个的例子
return points.size();
}
sort(points.begin(),points.end(),cmp);//把数组以xend为主要比较值从小到大排
int index=1;//把xend最小值作为最开始的比较点
int shootPoint=points[0][1];
int res=1;
while(index<points.size()){
if(points[index][0]<=shootPoint&&points[index][1]>=shootPoint){//如果气球落在xend的范围内,则换下一个
index++;
}
else{//如果气球不在xend范围内,就把这个气球的xend作为新的比较点
res++;
shootPoint=points[index][1];
index++;
}
}
return res;
}
};
用贪心算法,把所有的位置按照xend从小到大排,把xend作为参照值,可以使得用的箭最小。