leetcode 452 题
解题思路:
将气球左边界从小到大排序,然后从一个的最右边开始射箭,直到不能扎到下一个气球的最左边为止。偷一波官方题解的图。
class Solution {
public int findMinArrowShots(int[][] points) {
if (points.length == 0) {
return 0;
}
//我直接cv一波comparator升序排序,把右边界排整齐先
Arrays.sort(points, new Comparator<int[]>() {
public int compare(int[] p1, int[] p2) {
if(Integer.compare(p1[1], p2[1]) < 0) {
return -1;
} else if (Integer.compare(p1[1], p2[1]) > 0) {
return 1;
} else {
return 0;
}
}
});
int right = points[0][1];//设从第一个短右开始射♂入♂
int num = 1;//先来一支🗡
//要是🗡射♂到了最短的右边界还插♂不到下一个🎈,就把下一个气球的右边界搞♂成新的初始位置
//这里不知道为什么总是少一根箭,可能是因为边界没找好
/*for(int i=1;i<points.length-1;i++){
if(points[i][0] > right){
num++;
right = points[i][1];
}
}
*/
//用增强for循环for-each
for(int[] p : points) {
if(p[0] > right) {
num++;
right = p[1];
}
}
return num;
}
}