说一下思路:
- 对各个气球按照气球的做端点从小到大排序
- 遍历气球数组,同时维护一个射击区间,在满足可以将当前气球射穿的情况下,尽可能击穿更多气球,每击穿一个新的气球,更新一次射击区间
- 如果新的气球没办法击穿了,就需要一个新的弓箭手,即,增加一个新的射击区间,然后继续遍历气球数组
- bool cmp(pair<int,int> &a,pair<int,int> &b){
- return a.first < b.first;
- }
- class Solution {
- public:
- int findMinArrowShots(vector<pair<int, int>>& points) {
- if(points.size() == 0)
- return 0;
- sort(points.begin(),points.end(),cmp);//按照左端点从小到大排序
- int shoot_num = 1;
- int shoot_begin = points[0].first;
- int shoot_end = points[0].second;
- for(int i = 1;i < points.size();i++){
- if(points[i].first <= shoot_end){
- shoot_begin = points[i].first;
- if(shoot_end > points[i].second)
- shoot_end = points[i].second;
- }
- else{
- shoot_num++;
- shoot_begin = points[i].first;
- shoot_end = points[i].second;
- }
- }
- return shoot_num;
- }
- };