力扣 452. 用最少数量的箭引爆气球
这道题通过画图分析,得知当两个气球有重叠部分,可以通过在重叠部分射箭刺破气球,但是在代码的操作中可以通过result计数来记录需要的箭的数量,具体的操作是在遇到不重叠的两个气球时result++,值得注意的地方是,应该从数组的最左边开始,每两个相邻的气球计算一次是否需要箭,这样是局部最优,并且通过这个局部最优可以推导出全局最优。
具体代码如下
class Solution { public int findMinArrowShots(int[][] points) { if(points.length==0)return 0; // 用Integer内置的比较方法,否则会溢出。 Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0])); int result=1; for(int i=1; i<points.length; i++){ if(points[i][0]>points[i-1][1]){ result++; } else{ points[i][1]=Math.min(points[i-1][1], points[i][1]); } } return result; } }