用最少数量的箭引爆气球

xiaoxiao2021-02-28  13

画图可以帮助理解题意。

1.对于某个气球,至少需要1个弓箭

2.击穿这只气球的同时,尽可能多的击穿其他的

将气球按照左端点从小到大的顺序排序,然后每次遍历气球时,看这个气球在没在当前可射击区间内,在的话,就看用不用更新射击区间。如果不在当前可射击区间内的话,就开辟一个新的区间,射击数也就需要加1.

bool cmp(const pair<int,int>& a,const 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;//至少射击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(points[i].second <= shoot_end) shoot_end = points[i].second; }else{//开一个新的区间 shoot_num++; shoot_begin = points[i].first; shoot_end = points[i].second; } } return shoot_num; } };
转载请注明原文地址: https://www.6miu.com/read-2100226.html

最新回复(0)