力扣-10.12-452

在这里插入图片描述
方法一:(自己写的)
按照区间起点进行排序,需要注意的是转换成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()这个方法,也没找到太多资料。

猜你喜欢

转载自blog.csdn.net/Desperate_gh/article/details/109022472