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-15双周赛-1288-删除被覆盖区间

1288. 删除被覆盖区间

LeetCode 1024. 视频拼接(每日一题)

《LeetCode之每日一题》:100.检查是否区域内所有整数都被覆盖

LeetCode 0228. 汇总区间

LeetCode138. 复制带随机指针的链表/1893. 检查是否区域内所有整数都被覆盖/370. 区间加法(差分数组+前缀和)