题目链接
题目分析
这个题其实有点像区间合并的题目,先对气球按照Xstart
升序进行排序,然后计算所有气球可以整合成最少的区间数,返回即可。
但是这里这个题有一个坑,就是在自定义排序的时候,不能直接简单使用a-b
作为返回条件,因为在最后一个测试用例中,两个数相减会导致结果溢出整型的范围,这里我们需要一点小技巧,利用Integer.compare(a,b)
作为返回值即可。
代码实现
class Solution {
public int findMinArrowShots(int[][] points) {
if(points.length == 0){
return 0;
}
//测试用例加强了,如果直接用a - b的方法,会导致溢出的问题。
Arrays.sort(points, (o1, o2) -> {
return Integer.compare(o1[0], o2[0]);
});
int res = 0;
int start = points[0][0];
int end = points[0][1];
for(int i = 1; i < points.length; i++){
if(points[i][0] > end){
res++;
start = points[i][0];
end = points[i][1];
}else{
end = Math.min(end, points[i][1]);
}
}
return res + 1;
}
}