首先要注意的是0输入问题
其次自己想的思路是先按左起点从小到大排序,如果左起点相等再按右起点从小到大排序,然后遍历数组比较前一个没被删除标记,但是有一个问题是,也许删除的是前一个比较的标志数组,因为比如(1,13)和(2,11)是应该删除(1,13)的。
所以只需要对左起点排序,然后遍历数组,保留右起点小的那个数据即可。
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
if(intervals.length < 2 ||intervals == null)return 0;
//Arrays.sort(intervals,(int[] a,int[] b) -> a[0] > b[0] ? 1:-1);
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0])return o1[1] > o2[1] ? 1:-1;
else return o1[0] > o2[0] ? 1:-1;
}
});
int ans = 0;
int end = intervals[0][1];
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] < end){
ans++;
end = Math.min(end,intervals[i][1]);
}else{
end = intervals[i][1];
}
}
return ans;
}
}