题目:
分析:题目与安排会议的问题类似,安排会议的问题要求安排最多的会议,所以按每个会议结束时间排序,先选最早结束的会议,然后选下一个开始时间大于已选结束时间的会议,这个题目类似同样使用贪心的思想,不过现在求的是区间重叠的个数,其实也就是会议安排问题中不选的会议有多少个,同样,我们对区间终点进行升序排序,如果终点相同,按起点降序排序。
接下来只需遍历数组,下一个区间的点小于上一个区间的终点,那么重叠数+1;否则更新上一个不重叠区间的数组索引,用于之后比较
代码:
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals == null || intervals.length == 0 || intervals.length == 1){
return 0;
}
Arrays.sort(intervals, new intervalsComparator());
int count = 0;
int index = 0;
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] < intervals[index][1]){
count++;
}else{
index = i;
}
}
return count;
}
class intervalsComparator implements Comparator<int[]>{
public int compare(int[] one, int[] two){
if(one[1] < two[1]){
return -1;
}else if(one[1] > two[1]){
return 1;
}else{
if(one[0] < two[0]){
return 1;
}else if(one[0] > two[0]){
return -1;
}else{
return 0;
}
}
}
}
}