数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点。、
那么我们收到选择不相交区间的启发,将所有区间按bi从小到大排序(bi相等,按ai从大到小排序),那么第一个区间选哪个点呢,一定是取最后一个点。
leetcode 452 用最少数量的箭引爆气球
代码如下:
class Solution {
public:
int findMinArrowShots(vector<vector<int>>& points) {
if(points.empty()) return 0;
sort(points.begin(),points.end(),[](const vector<int>& a,const vector<int>& b){
return a[1]==b[1]?a[0]>b[0]:a[1]<b[1];
});
int pre=points[0][1],count=1;
for(int i=1;i<points.size();i++){
if(pre<points[i][0]){//如果区间不想交,则res++。
count++;
pre=points[i][1];
}
else continue;
}
return count;
}
};