贪心:每加入一个气球取其最小区间作为引爆区间
1.先按照区间的左边界进行由小到大排序
2.先根据第一个区间设定可引爆区间的限制的范围,当遇到下一个气球时,判断该气球是否与前面的气球有交集,如果有则将可引爆区间设为当前可引爆与当前区间的交集作为新的可引爆区间的新范围 ,如果没有交集则需要重新发射一支箭,并将新的气球范围设置为可引爆区间
class Solution {
public:
// 求区间的交集
// 1.先按照区间的左边界进行由小到大排序
// 2.先根据第一个区间设定可引爆区间的限制的范围,当遇到下一个气球时,判断该气球是否与前面的气球有交集,如果有则将可引爆区间设为当前可引爆与当前区间的交集作为新的可引爆区间的新范围 ,如果没有交集则需要重新发射一支箭,并将新的气球范围设置为可引爆区间
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(),points.end(),[](vector<int> &v1,vector<int> &v2)->int{
if(v1[0]<v2[0]){
return true;
}else if(v1[0]==v2[0]){
return v1[1]<v2[1];
}else{
return false;
}
});
int start = points.front()[0];
int end = points.front()[1];
int count = 1;
for(auto p:points){
// cout<<start<<" "<<end<<" ";
// cout<<p[0]<<" "<<p[1]<<endl;
if(start<=p[0]&&p[0]<=end||start<=p[1]&&p[1]<=end){
start = max(p[0],start);
end = min(p[1],end);
}else{
start = p[0];
end = p[1];
count++;
}
}
return count;
}
};