题目
分析
贪心算法:
局部最优:当气球出现重叠,一起射,所用弓箭最少。
全局最优:把所有气球射爆所用弓箭最少。
为了尽可能让气球重叠,需要对数组进行排序。以气球的起始位置排序,从前向后遍历。
可以看出首先第一组重叠气球,一定是需要一个箭,气球3,的左边界大于了 第一组重叠气球的最小右边界,所以再需要一支箭来射气球3了。
代码
class Solution {
public int findMinArrowShots(int[][] points) {
int count = 1;
Arrays.sort(points,(a,b) -> Integer.compare(a[0],b[0]));
for(int i = 1;i < points.length;i++){
if(points[i][0] <= points[i-1][1]){
points[i][1] = Math.min(points[i][1],points[i-1][1]);
}else{
count++;
}
}
return count;
}
}