public static 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 o1[1] - o2[1];
}
});
int shootNum = 1;
int shootBegin = points[0][0];
int shootEnd = points[0][1];
for (int i = 1; i <points.length ; i++) {
if (points[i][0] <=shootEnd){
shootBegin = points[i][0];
if(points[i][1]<=shootEnd){
shootEnd = points[i][1];
}
}else {
shootNum++;
shootBegin = points[i][0];
shootEnd = points[i][1];
}
}
return shootNum;
}
这里我们只考虑增加弓箭手的情况,当下一个气球的start位置大于上一个气球的end位置,那么我们就增加弓箭手的数量,把弓箭手射程end更新到这个最新的end位置
public static int findMinArrowShots2(int[][] points) {
if (points.length == 0)
return 0;
Arrays.sort(points, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1] - o2[1];
}
});
int shootNum = 1;
int shootEnd = points[0][1];
for(int [] p :points){
if(shootEnd < p[0]){
shootNum++;
shootEnd = p[1];
}
}
return shootNum;
}