LeetCode[1288]删除被覆盖区间

难度:Medium

题目:

给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。

只有当 c <= ab <= 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] <= 10^5
  • 对于所有的 i != jintervals[i] != intervals[j]

Related Topics

  • 数组
  • 排序

重点!!!解题思路

明确解题思路:

此题类似LeetCode[56]合并区间这道题,前一道题是要将相交的区间合并,但是这一道题要求将包含的区间删除,这一道题明显比前一道题简单,因为此题并不需要考虑交集的情况,之需要考虑什么条件包含即可。

源码+讲解:

java 复制代码
    class Solution {
        public int removeCoveredIntervals(int[][] intervals) {
            Arrays.sort(intervals, new Comparator<int[]>() {
                @Override
                public int compare(int[] o1, int[] o2) {
                    return o1[0] == o2[0] ? o2[1] - o1[1] : o1[0] - o2[0];  //如果左区间相同,那么就根据右区间降序排序。否则就正常根据左区间升序排序
                }
            });
            int cnt=0,end=0,pre_end=0;  //end是此时的右区间,pre_end是上一个右区间
            for (int[] interval : intervals) {
                end=interval[1];  //拿到每次的右区间
                if (end>pre_end){  //当此时的右区间比上一个右区间大时,才能确定这两个区间并不是包含关系
                    cnt++;  //既然不是包含关系 说明不用删除 数组长度可以加1
                    pre_end=end;
                }
            }
            return cnt;
        }
    }

运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧,喜欢练习算法那就点个攒吧

相关推荐
Fuly102430 分钟前
大模型剪枝(Pruning)技术简介
算法·机器学习·剪枝
Xの哲學36 分钟前
Linux网卡注册流程深度解析: 从硬件探测到网络栈
linux·服务器·网络·算法·边缘计算
bubiyoushang88839 分钟前
二维地质模型的表面重力值和重力异常计算
算法
仙俊红1 小时前
LeetCode322零钱兑换
算法
颖风船1 小时前
锂电池SOC估计的一种算法(改进无迹卡尔曼滤波)
python·算法·信号处理
551只玄猫1 小时前
KNN算法基础 机器学习基础1 python人工智能
人工智能·python·算法·机器学习·机器学习算法·knn·knn算法
charliejohn1 小时前
计算机考研 408 数据结构 哈夫曼
数据结构·考研·算法
POLITE32 小时前
Leetcode 41.缺失的第一个正数 JavaScript (Day 7)
javascript·算法·leetcode