文章目录
力扣算法学习day25-1
435-无重叠区间
题目
代码实现
class Solution {
// 直接想到并通过的方法。 速度51-52ms 原理,左排序后找相交个数,即需要减去的数量。
// public int eraseOverlapIntervals(int[][] intervals) {
// Arrays.sort(intervals,(o1,o2) -> {
// return o1[0] - o2[0];
// });
// int sum = 0;
// for(int i = 1;i < intervals.length;i++){
// if(intervals[i][0] >= intervals[i-1][1]){
// continue;
// } else{
// sum++;
// intervals[i][1] = Math.min(intervals[i][1],intervals[i-1][1]);
// }
// }
// return sum;
// }
// 代码随想录,给的Java代码右边界排序速度 65-67ms ,我个人改了点,速度 47-48ms
// 后面还给了个左边排序,和我上面逻辑一样的写法有些不一样,速度一样。
// 右边界排序是找非相交的个数,然后用总数减去非相交的个数即需要减去的数量。
public int eraseOverlapIntervals(int[][] intervals) {
if (intervals.length < 2) return 0;
Arrays.sort(intervals, (o1,o2) ->{
return o1[1] - o2[1];
});
int count = 1;
int edge = intervals[0][1];
for (int i = 1; i < intervals.length; i++) {
if (edge <= intervals[i][0]){
count ++; //non overlap + 1
edge = intervals[i][1];
}
}
return intervals.length - count;
}
}