原题链接
在选择用一根箭射穿的气球时,气球的结尾坐标很重要。结尾坐标内包含的气球越多,则一根箭能射穿的气球就越多。所以贪心策略就是优先找出一个气球的结尾坐标包含越多的气球。
具体实现方法时,先把区间按照结尾的大小升序排序,每次选择当前气球与前面的所有气球都有重复区间,即当前气球的开始坐标小于前面的任何一个气球的结尾坐标(表示当前气球跟前面的气球能被用一根箭射穿),若当前气球不能跟前面的气球被同一根箭射穿,则令index等于当前气球下标(后面的气球不用跟index之前的气球比较了)。
代码
class Solution {
public int findMinArrowShots(int[][] points) {
List<int[]> list = Arrays.asList(points) ;
Collections.sort(list , new Comparator<int[]>(){
@Override
public int compare( int[] o1 , int[] o2 ){
if( o1[1] > o2[1] ){
return 1 ;
}
else if( o1[1] < o2[1] ){
return -1 ;
}
else{
return 0 ;
}
}
}) ;
int count = 1 ;
int index = 0 ;
for( int i = 1 ; i < list.size() ; i++ ){
int[] curr = list.get(i) ;
for( int j = index ; j < i ; j++ ){
int[] pre = list.get(j) ;
if( curr[0] <= pre[1] ){
continue ;
}
else{
index = i ;
count++ ;
break ;
}
}
}
return count ;
}
}