按照区间的结尾进行从小到大的排序
依旧是贪心算法,因为选择的区间的结尾越小,越可能在后面增加区间
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length==0) {
return 0;
}
Arrays.sort(intervals,new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[1]-o2[1];
}
});
int cnt=1;
int end=intervals[0][1];
for(int i=1;i<intervals.length;i++) {
if(intervals[i][0]<end) {
continue;
}
cnt++;
end=intervals[i][1];
}
return intervals.length-cnt;
}
}
这是隐式的创建比较器,也可以单独的创建一个类,如下
import java.util.Comparator;
public class MyComparator implements Comparator<int[]>{
@Override
public int compare(int[] o1, int[] o2) {
return o1[1]-o2[1]; //按区间结尾从小到大排序
}
}
public static int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length==0) {
return 0;
}
MyComparator mcmp=new MyComparator();
Arrays.sort(intervals,mcmp);
int cnt=1;
int end=intervals[0][1];
for(int i=1;i<intervals.length;i++) {
if(intervals[i][0]<end) {
continue;
}
cnt++;
end=intervals[i][1];
}
return intervals.length-cnt;
}
public static void main(String[] args) {
int[][] intervals= {
{
1,2},{
2,3},{
3,4},{
1,3}};
System.out.println(eraseOverlapIntervals(intervals));
}