方法一:(自己写的)
按照区间起点进行排序,需要注意的是转换成double
class Solution {
public int findMinArrowShots(int[][] points) {
if(points.length==0) {
return 0;
}
Arrays.sort(points,new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return (int) ((double)o1[0]-(double)o2[0]); //按区间的起点从小到大排序
}
});
int start=points[0][0];
int end=points[0][1];
int cnt=1;
for(int i=1;i<points.length;i++) {
if(points[i][0]<=end) {
start=points[i][0];
end=Math.min(end,points[i][1]);
}else {
cnt++;
start=points[i][0];
end=points[i][1];
}
}
return cnt;
}
}
方法二:
按区间的终点排序
class Solution {
public int findMinArrowShots(int[][] points) {
if(points.length==0) {
return 0;
}
Arrays.sort(points,Comparator.comparingInt(o->o[1])); // 按区间的终点从小到大排序
int cnt=1;
int end=points[0][1];
for(int i=1;i<points.length;i++) {
if(points[i][0]<=end) {
continue;
}
cnt++;
end=points[i][1];
}
return cnt;
}
}
注意使用Comparator.comparingInt()这个方法,也没找到太多资料。