Q:给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。
只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。
在完成所有删除操作后,请你返回列表中剩余区间的数目。
示例:
输入:intervals = [[1,4],[3,6],[2,8]]
输出:2
解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。
A:
对于三种情况,我们应该这样处理:
对于情况一,找到了覆盖区间。
对于情况二,两个区间可以合并,成一个大区间。
对于情况三,两个区间完全不相交。
public int removeCoveredIntervals(int[][] intervals) {
if (intervals.length <= 1)
return intervals.length;
Arrays.sort(intervals, (t1, t2) -> {
if (t1[0] == t2[0])
return t2[1] - t1[1];
else
return t1[0] - t2[0];
});//排序
int left = intervals[0][0];
int right = intervals[0][1];
int res = 1;
for (int i = 1; i < intervals.length; i++) {
if (right < intervals[i][0]) {
left = intervals[i][0];
right = intervals[i][1];
res++;
} else {
if (right < intervals[i][1])
res++;
left = Math.min(left, intervals[i][0]);
right = Math.max(right, intervals[i][1]);
}
}
return res;
}