思路如下:
1、要求移除区间的最小数量,即求不重叠区间的最大数量
2、对二维数组按照每个元素的end值从小到大排序
3、贪心算法,要求每一个元素的start值要大于等于前一个元素的end值,这两个元素即形成2个不重叠区间,从头遍历找到不重叠区间的最大数量。
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length==0){
return 0;
}
int length=intervals.length;
return length-intervalSchedule(intervals);
}
public int intervalSchedule(int[][] intervals){
int length=intervals.length;
//二维数组根据end元素排序
Arrays.sort(intervals,new Comparator<int[]>(){
@Override
public int compare(int[] a1,int[] b1){
return a1[1]-b1[1];
}
});
//初始的end值设置为intervals数组的第一个元素的end
int end=intervals[0][1];
//每个区间本身就是一个不重叠区间,count初始值为1
int count=1;
//遍历
for(int[] temp:intervals){
//每个元素start值要大于等于上一个元素的end值才能不重叠
if(temp[0]>=end){
count++;
end=temp[1];
}
}
return count;
}
}
原题地址:
435. 无重叠区间