1288. 删除被覆盖区间

Posted 不吐西瓜籽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1288. 删除被覆盖区间相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

  给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。在完成所有删除操作后,请你返回列表中剩余区间的数目。



说明

一、题目

  输入:intervals = [[1,4],[3,6],[2,8]]
  输出:2
  解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。

二、分析

  • 对区间进行排序之后可以得到一个相对有序的区间数组。
  • 这时候的区间相交只需要判断后一个区间的终止是不是在于前一个区间的终止之前就可以判断是否区间覆盖了。
  • 但是有一个问题,有可能两个区间的起点相同,但是前一个的区间在后一个的范围内,这样判断就无法拿到正确的结果,也就需要我们的排序区间是先对起点进行排序,如果相同则再进行终点排序,保证每次都是用前一个区间去覆盖后一个区间。
class Solution {
    public int removeCoveredIntervals(int[][] intervals) {
        int ans = intervals.length;
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0]) return o2[1] - o1[1];
                else return o1[0] - o2[0];
            }
        });
        for(int i = 0; i < intervals.length; i++) {
            int j = i + 1;
            while(j < intervals.length && intervals[j][1] <= intervals[i][1]) {
                ans--;
                j++;
            }
            i = j - 1;
        }           
        return ans;
    }
}

总结

逻辑问题,将情况考虑完即可。

以上是关于1288. 删除被覆盖区间的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode——删除被覆盖区间

LeetCode 5127. 删除被覆盖区间 Remove Covered Intervals

贪心算法----区间覆盖问题(POJ2376)

如何修复重叠的片段

最多区间覆盖问题

片段的布局被活动的工具栏/标签布局覆盖