Input:
[[10,16], [2,8], [1,6], [7,12]]
Output:
2
11-> 10-16 7-12
2->2-8 ,1-6
大佬思路,因为已经按照上界排序了,初始化第一个飞镖的坐标是x0=array[0][1],后边其他区间的上界肯定是>=x0的,如果有下界<=x0的,那这个飞镖必定能刺破气球,不需要增加飞镖,如果不重合了,就设定新的边界,并且count++;
贪心法, 每个气球只少需要一支箭, 先按照右端点排序, 然后每次
从最小的右端点射出一支箭, 去掉被射爆的气球, 重复该过程.
AC代码:
class Solution {
public:
static bool comp(const vector<int>&a, const vector<int>&b)
{
return (a[1] < b[1]);
}
int findMinArrowShots(vector<vector<int>>& points) {
sort(points.begin(), points.end(), comp);
int tmp = points[0][1];
int count = 1;//开始已经有一支箭了
for (int i = 1; i < points.size(); i++)
{
if (points[i][0] > tmp)
{
count++;
tmp = points[i][1];
}
}
return count;
}
};