java实现:
class Solution {
public int findMinArrowShots(int[][] points) {
Arrays.sort(points,new Comparator<int []>(){
public int compare(int []a,int []b){
return a[0] < b[0] ? -1:1;
}
});
int min=points[0][1],count=1;
for(int i=1;i<points.length;i++){
if(min<points[i][0]){
count++;
min=points[i][1];
}
min=Math.min(min,points[i][1]);
}
return count;
}
}
解法就是贪心算法,之前在最后被边界值[[-2147483646,-2147483645],[2147483646,2147483647]]拦下,主要问题是之前我使用的compare函数是
public int compare(int []a,int []b){
return a[0]-b[0];
}
没有意识到这个情况下会发生整数溢出,所以这里踩了个坑
在做 435. 无重叠区间 题时,解法类似,但最后不能用 return a[]>b[]?1:-1 这种判断 , 会报错java异常:Comparison method violates its general contract!
可参考这条博客 https://blog.csdn.net/tomcosin/article/details/83381221