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

运行结果:

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

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

相关推荐
wearegogog1235 小时前
基于 MATLAB 的卡尔曼滤波器实现,用于消除噪声并估算信号
前端·算法·matlab
一只小小汤圆6 小时前
几何算法库
算法
Evand J6 小时前
【2026课题推荐】DOA定位——MUSIC算法进行多传感器协同目标定位。附MATLAB例程运行结果
开发语言·算法·matlab
leo__5206 小时前
基于MATLAB的交互式多模型跟踪算法(IMM)实现
人工智能·算法·matlab
忆锦紫6 小时前
图像增强算法:Gamma映射算法及MATLAB实现
开发语言·算法·matlab
t198751286 小时前
基于自适应Chirplet变换的雷达回波微多普勒特征提取
算法
guygg887 小时前
采用PSO算法优化PID参数,通过调用Simulink和PSO使得ITAE标准最小化
算法
老鼠只爱大米7 小时前
LeetCode算法题详解 239:滑动窗口最大值
算法·leetcode·双端队列·滑动窗口·滑动窗口最大值·单调队列
mit6.8247 小时前
序列化|质数筛|tips|回文dp
算法
rgeshfgreh7 小时前
C++字符串处理:STL string终极指南
java·jvm·算法