LeetCode——删除被覆盖区间
Posted Shaw_喆宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode——删除被覆盖区间相关的知识,希望对你有一定的参考价值。
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;
}
以上是关于LeetCode——删除被覆盖区间的主要内容,如果未能解决你的问题,请参考以下文章
《LeetCode之每日一题》:100.检查是否区域内所有整数都被覆盖
LeetCode138. 复制带随机指针的链表/1893. 检查是否区域内所有整数都被覆盖/370. 区间加法(差分数组+前缀和)