452. 用最少数量的箭引爆气球 (贪心)
作者:互联网
LeetCode: 452. 用最少数量的箭引爆气球
贪心思想。
贪心题 >> 思路: 排序、贪心
按每个气球的区间的右端点大小从小到大排序 >> (达到降维的目的?? 之后就不需要考虑右端点那边的覆盖问题)
样例: [[10,16],[2,8],[1,6],[7,12]]
排序后
1 6
2 8
7 12
10 16
考虑右端点是否覆盖后面区间的左起点,如果覆盖到了,就是可以连带射爆的气球。
如果不能覆盖,表示ans++, 进行下一发子弹。
AC Code
小贴士: 自定义排序中,根据数据范围,避免 return a[1] - b[1] 时 int 型溢出, 换用 < 等运算符来比较。
public int findMinArrowShots(int[][] points) {
if(points.length < 2) return points.length;
// 自定义排序
// 按右区间来从小到大排序
Arrays.sort(points, new Comparator<int[]>(){
public int compare(int[] a, int[] b){
if(a[1] < b[1]) return -1;
if(a[1] > b[1]) return 1;
else return 0;
}
});
// 最大的右
int right = points[0][1];
int ans = 1;
for (int i = 0; i < points.length; i++) {
// 找到大于该右端点的左起点。 >> 因为该右端点是最小的, 往后的右端点肯定包含进去
// 只需要考虑左起点是否在 该右端点的左边。
// 降维思想
if(points[i][0] > right){
right = points[i][1];
ans++;
}
}
return ans;
}
标签:return,int,452,points,端点,ans,排序,气球,贪心 来源: https://blog.csdn.net/qq_43765535/article/details/110006358