区间开头越大,留给前面区间的空间越大,(局部最优的)
1.按区间的开头进行排序()
2.让当前区间的结尾和上一个区间的头部比较大小
3.如果当前区间的结尾超过了上一个区间的头部,意味着覆盖了
public static int eraseOverlapIntervals(int[][] intervals) {
//先将各个区间数组根据左界限arr[0] 进行从大到小排序(重写Comparator方法)
Arrays.sort(intervals,new Comparator<int[]>() {
@Override
public int compare(int[] arr1,int[] arr2) {
if(arr1[0] < arr2[0]) { //如果arr1[0] < arr2[0]返回1(往后排)
return 1;
}else if (arr1[0] == arr2[0]) {
return 0;
}else {//如果arr1[0] > arr2[0]返回-1(往前排)
return -1;
}
}
});
int leftVal = intervals[0][0];
int res = 0;//覆盖的区间数(结果)
for(int i = 1; i < intervals.length; i++) {
//如果第二个的右区间超过(大于)end(上一个区间的左区间)
if(intervals[i][1] > leftVal) {
res++;//结果加1
continue;//跳出当前循环
}
//如果没有超过,
leftVal = intervals[i][0];//令end等于当前区间的右区间
}
return res;
}