本题为贪心算法,贪心在一定存在某最优解 使所有的箭都在气球的右边界处射出
具体思路为 对所有气球按照右边界进行排序,设置一个pos变量记录第一个气球的最右位置,然后循环遍历其他气球,判断其他气球的左边界是否小于第一个气球的右边界.
若小于,说明此气球可与上一气球使用同一支箭引爆
若不小于,则对箭的数量先自增一次,然后重置pos变量为当前气球的最右边界,继续循环
class Solution {
public int findMinArrowShots(int[][] points) {
int res=1;
Arrays.sort(points,(a,b)->{
return a[1]>b[1]?1:-1; //为防止数据溢出
});
int pos=points[0][1]; //第一个气球的右边界
for(int i=1;i<points.length;i++){
if(points[i][0]<=pos){ //如果下一个气球的左边界小于上一气球的右边界
// 说明可以被同一支箭引爆
continue;
}else{
res++;
pos=points[i][1];
}
}
return res;
}
}