给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。
只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。
在完成所有删除操作后,请你返回列表中剩余区间的数目。
示例:
输入:intervals = [[1,4],[3,6],[2,8]]
输出:2
解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。
提示:
1 <= intervals.length <= 1000
0 <= intervals[i][0] < intervals[i][1] <= 105
对于所有的 i != j: intervals[i] != intervals[j]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-covered-intervals
(1)排序
思路参考一文秒杀所有区间相关问题。
//思路1————排序
public int removeCoveredIntervals(int[][] intervals) {
//res保存被覆盖的区间数,初始值为0
int res = 0;
//按照区间的左端点对所有区间进行升序排序
Arrays.sort(intervals, (a, b)-> {
if (a[0] == b[0]) {
return b[1] - a[1];
} else {
//如果Comparator接收的返回值为正数,就会交换 a 和 b
return a[0] - b[0];
}
});
//记录合并区间的左端点和右端点
int left = intervals[0][0];
int right = intervals[0][1];
for (int i = 1; i < intervals.length; i++) {
int[] curInter = intervals[i];
//找到被覆盖的区间
if (left <= curInter[0] && curInter[1] <= right) {
res++;
}
//找到相交区间,更新右端点
if (left <= curInter[0] && right <= curInter[1]) {
right = curInter[1];
}
//找到的区间无交集,更新左右端点
if (right <= curInter[0]) {
left = curInter[0];
right = curInter[1];
}
}
return intervals.length - res;
}
创作挑战赛
新人创作奖励来咯,坚持创作打卡瓜分现金大奖
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43004044/article/details/124187561
内容来源于网络,如有侵权,请联系作者删除!