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;
        }
    }

运行结果:

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

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

相关推荐
.YM.Z13 分钟前
【数据结构】:排序(一)
数据结构·算法·排序算法
Chat_zhanggong34516 分钟前
K4A8G165WC-BITD产品推荐
人工智能·嵌入式硬件·算法
百***480731 分钟前
【Golang】slice切片
开发语言·算法·golang
墨染点香44 分钟前
LeetCode 刷题【172. 阶乘后的零】
算法·leetcode·职场和发展
做怪小疯子1 小时前
LeetCode 热题 100——链表——反转链表
算法·leetcode·链表
linweidong1 小时前
4399 Go开发面试题及参考答案(下)
排序算法·http状态码·消息推送·topk·go并发·tcp握手·并发模型
做怪小疯子3 小时前
LeetCode 热题 100——矩阵——旋转图像
算法·leetcode·矩阵
努力学习的小廉3 小时前
我爱学算法之—— BFS之最短路径问题
算法·宽度优先
高山上有一只小老虎3 小时前
构造A+B
java·算法
木头左3 小时前
缺失值插补策略比较线性回归vs.相邻填充在LSTM输入层的性能差异分析
算法·线性回归·lstm