区间覆盖问题

博客探讨了如何解决区间覆盖问题,建议先对区间按起点升序排序,再按终点降序排列,以便识别覆盖区间。文章通过分析不同情况下的区间放置形式,揭示了解决此类问题的一般思路,并提供了关键的代码实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
思考:
题目问我们,去除被覆盖区间之后,还剩下多少区间,那么我们可以先算一算,被覆盖区间有多少个,然后和总数相减就是剩余区间数。
对于这种区间问题,如果没啥头绪,首先排个序看看,比如我们按照区间的起点进行升序排序。先对区间中的首元素升序排序,再按照首元素相同时,区间尾元素降序排序,我们需要保证长的那个区间在上面(按照终点降序),这样才会被判定为覆盖,否则会被错误地判定为相交,少算一个覆盖区间。
在这里插入图片描述
最后分别有三种情况的区间放置形式,当为覆盖区间时,res++。
在这里插入图片描述

class Solution {
   
    public int removeCoveredIntervals(int[][] intervals) {
   
        // 按照起点升序排列,起点相同,降序排列
        Arrays.sort(intervals,(a,b)->{
   
            if(a[0] == b[0]){
   
                return b[1] - a[1];
            }
            return a[0] - b[0];
        });
        // 记录合法区间的起点和终点
        int left = intervals[0][0];
        int right = intervals[0][1];
        // 记录覆盖区间的数目
        int res = 0;
        for (int i = 1;i<intervals.length;i++){
   
            int[] intv = intervals[i];
            // 情况一:找到覆盖区间
            if(left<=intv[0]&&right>=intv[1]){
   
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值