【解题思路】
只有两个集合有交集,那么交集处就可以用一支箭击破这两个气球。使用贪心算法对points[ ][ ]按照第一位数、第二位数从小到大的顺序排序,让相近的集合尽可能排在相邻的位置,可以用最少的箭击破所有气球。设置一个rPoint表示下一支箭可以击破的气球的右边界,在这个右边界左边的气球都可以被击破,而在右边界右边的气球,需要等下一支箭击破。
class Solution {
public int findMinArrowShots(int[][] points) {
int n = points.length;
Arrays.sort(points, new Comparator<int[]>(){
public int compare(int[] a, int[] b)
{
if(a[0] == b[0]) return a[1]<b[1]?-1:1;
return a[0]<b[0]?-1:1;
}
});
int ans = 1;
//int lPoint = points[0][0];
int rPoint = points[0][1];
for(int i = 1; i < n; i++)
{
if(points[i][0] > rPoint)
{
ans++;
rPoint = points[i][1];
}
else{
if(points[i][1] < rPoint)
{
rPoint = points[i][1];
}
}
}
return ans;
}
}