题目描述:
标签:贪心算法
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。
注意:
可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
代码:
思路分析:思路同用最少数量的箭引爆气球
1、首先按照右边界从小到大排序
2、每次比较intervals[i][0] < intervals[i-1][1]
①满足,说明这个区间重叠,需要统计重叠部分的最小右边界,给之后的区间留足够大的空间(体现贪心)
②不满足,说明没有重叠,统计不重叠区间的个数
3、返回总区间个数-不重叠区间个数
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length == 0) return 0;
Arrays.sort(intervals,new Comparator<int[]>(){
public int compare(int[] interval1,int[] interval2){
if(interval1[1] > interval2[1]){
return 1;
}else if(interval1[1] < interval2[1]){
return -1;
}else{
return 0;
}
}
});
int count = 1;
for(int i = 1;i < intervals.length;i++){
if(intervals[i][0] < intervals[i-1][1]){
intervals[i][1] = Math.min(intervals[i][1],intervals[i-1][1]);
}else{
count++;
}
}
return intervals.length - count;
}
}