题目452. Minimum Number of Arrows to Burst Balloons
等级: medium
标签:贪心
思路
对pair,以第一个元素为第一排序准则,第二个元素为次要准则排序。
然后从小到大扫描,寻找连续的有交叠部分的pair,然后销毁,计数加一,继续此操作至尾部,计数结果即为答案
实现
# include <iostream>
# include <Vector>
# include <algorithm>
using namespace std;
bool cmp(pair<int, int> a, pair<int, int> b) {
return a.first < b.first || (a.first == b.first && a.second < b.second);
}
class Solution {
public:
int findMinArrowShots(vector<pair<int, int> >& points) {
int size = points.size();
if(size <= 1) return size;
sort(points.begin(), points.end(), cmp);
int index = 0, border = 0, ret = 0;
border = points[index].second;
while(1) {
ret++;
while(index < size && points[index].first <= border) {
if(points[index].second < border)
border = points[index].second;
index++;
};
if(index >= size) break;
// update the border
border = points[index].second;
}
return ret;
}
};