思路:本题也就是要求重叠区间的数量,因为题目给的一系列区间的无序的,我们需要先进行排序才能进行遍历处理,我们可以按左边界进行从小到大的排序,然后再从左到右进行逐个的遍历,判断是否是重复区间(上一个区间的下线大于下一个区间的上线),然后进行对于区间下线进行更新,最好自己按照代码画图模拟一下,这题比较抽象
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
// 按照左边界从小到大排序
Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));
int res = 0;
int pre = intervals[0][1];
// 从左往右 确定右边界是否重叠
for (int i = 1; i < intervals.length;i++){
// 上一个区间的右上线如果大于下一个区间的左下线,则重叠
if (pre > intervals[i][0]){
// 重叠区间加一 把上一个区间的值更改为这两个区间中更小的上线
res++;
pre = Math.min(pre,intervals[i][1]);
}else {
// 如果不重叠 直接更新 然后进行下一轮判断
pre = intervals[i][1];
}
}
return res;
}
}