// 定义一个名为Solution的类
class Solution {
// 定义公共方法eraseOverlapIntervals,输入为二维整数数组intervals,返回值类型为整数
public int eraseOverlapIntervals(int[][] intervals) {
// 首先,按照区间的起始位置对区间进行升序排序
Arrays.sort(intervals, (a, b) -> {
return Integer.compare(a[0], b[0]);
});
// 初始化计数器remove,用于记录需要移除的重叠区间数量
int remove = 0;
// 初始化变量pre,存储前一个区间的结束位置
int pre = intervals[0][1];
// 遍历整个区间数组,从第二个区间开始(下标i=1)
for (int i = 1; i < intervals.length; i++) {
// 检查当前区间(intervals[i])是否与前一个区间重叠
if (pre > intervals[i][0]) {
// 如果重叠,则增加需要移除的区间数量
remove++;
// 更新pre为前一个区间和当前区间结束位置的较小值,以便判断后续区间是否重叠
pre = Math.min(pre, intervals[i][1]);
}
// 若当前区间与前一区间不重叠,则更新pre为当前区间的结束位置
else {
pre = intervals[i][1];
}
}
// 返回需要移除的重叠区间数量
return remove;
}
}
这段代码实现了一个正确的解决方案,它可以找到并计算出在给定区间数组中为了消除所有重叠需要移除的区间数量。首先对区间按起始位置进行排序,然后遍历排序后的区间,如果当前区间与前一区间重叠,则增加移除计数器并更新pre为两区间结束位置的较小值。若不重叠则更新pre为当前区间的结束位置。最后返回移除的区间数量。