1893. 检查是否区域内所有整数都被覆盖

题目

给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。
如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。
已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。
在这里插入图片描述
思路:一开始思路其实比较简单,写个二重循环遍历一次就行了,主要是要判断返回false的条件,这个条件就是在left到right的任何一个数字中,都不包含在所有的range数组里面,用key来表示这个数字被多少个数组排除在外,每被排除一次就加1,直到等于数组的数量为止,因此代码实现为:

class Solution {
    public boolean isCovered(int[][] ranges, int left, int right) {
        // 思路 数组 最大为right,left
        int i,j;
        int key=0;
        int length = ranges.length;
        for (i=left;i<=right;i++){
            for(j=0;j<length;j++){
                if(i<ranges[j][0] || i>ranges[j][1]){
                    key++;
                }
                if(key==length) return false;
            }
            key = 0;
            
        }
        return true;

    }
}

法2:先排序,再调整left的位置
区间的起始点从小到达排序,然后每次比较,如果拿到的区间[l,r],left在区间内,即 l <= left <= r,那么可知,[left,r]便已经被覆盖,接下来只需接续检查剩余空白部分,让left = r + 1, 如果最后left可以超过right,则区间全部被覆盖。为true。

class Solution {
    public boolean isCovered(int[][] ranges, int left, int right) {
        // 排序
        Arrays.sort(ranges, (a1, a2) -> a1[0] - a2[0]);
        for(int[] range: ranges) {
            int l = range[0];
            int r = range[1];
            if(l <= left && left <= r) {
                left = r + 1;
            }
        }

        if(left>right){
            return true;
        }else return false;

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值