题目链接:
力扣435 -无重叠区间
解题思路:和之前的合并区间、汇总区间都比较相似,
- 先对二维数组排序,按照左边界升序;
- 当 当前区间的左区间 < 前一个区间的右区间,说明有重叠,res+1,还要更新当前区间的右区间,选择两个区间的右边界的最小值。
代码实现:
java
class Solution {
/**
* 1. 先对二维数组排序,按照左边界升序
* 2. 当 当前区间的左区间 < 前一个区间的右区间,说明有重叠,res+1,还要更新当前区间的右区间,选择两个区间的右边界的最小值
*/
public int eraseOverlapIntervals(int[][] intervals) {
if (intervals.length == 1) {
return 0;
}
Arrays.sort(intervals, (x, y) -> x[0] == y[0] ? x[1] - y[1] : x[0] - y[0]);// 排序
int res = 0;// 计数
int len = intervals.length;
for (int i = 1; i < len; i++) {
if (intervals[i][0] < intervals[i - 1][1]) {// 有重叠
res++;
intervals[i][1] = Math.min(intervals[i - 1][1], intervals[i][1]);
}
}
return res;
}
}