检查是否区域内所有整数都被覆盖· 6 月更文挑战

118 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

一、题目描述:

给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。

如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。

已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。

示例 1:

输入:ranges = [[1,2],[3,4],[5,6]], left = 2, right = 5 输出:true 解释:2 到 5 的每个整数都被覆盖了:

  • 2 被第一个区间覆盖。
  • 3 和 4 被第二个区间覆盖。
  • 5 被第三个区间覆盖。 示例 2:

输入:ranges = [[1,10],[10,20]], left = 21, right = 21 输出:false 解释:21 没有被任何一个区间覆盖。

提示:

1 <= ranges.length <= 50 1 <= starti <= endi <= 50 1 <= left <= right <= 50

来源:力扣(LeetCode) 链接:leetcode.cn/problems/ch… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

1.创建一个类表示每个区间,用list保存合并后的新区间组,将每个区间按照左端点排序; 2.把所有能合并在一起的区间用贪心的思想合并;把最后的结果集存在list中; 3.最后判断[left,right]是否在结果集的某个区间里

三、AC 代码:

class Solution {
    public boolean isCovered(int[][] ranges, int left, int right) {
        List<int[]> bigrange=new ArrayList<>();
        int n=ranges.length;
        for(int i=n-1;i>=0;i--){
            int[] tmp=new int[2];
            for(int j=0;j<i;j++){
                if(ranges[j][0]>ranges[j+1][0]){
                    tmp=ranges[j];
                    ranges[j]=ranges[j+1];
                    ranges[j+1]=tmp;
                }
            }
        }
​
        int start=ranges[0][0],end=ranges[0][1];
        for(int i=1;i<n;i++){
            if(ranges[i][0]<=end || ranges[i][0]-1==end){
                end=ranges[i][1]<end?end:ranges[i][1];
            }else{
                bigrange.add(new int[]{start,end});
                start=ranges[i][0];
                end=ranges[i][1];
            }
        }
        bigrange.add(new int[]{start,end});
        
        for(int[] range:bigrange){
            System.out.println(Arrays.toString(range));
            if(left>=range[0] && right<=range[1]){
                return true;
            }
        }
        return false;
    }
}

四、总结:

结果截图

image.png

掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐

希望对你有帮助,期待您找到心意的工作和满意的offer

期待下次再见~

🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注Jam,从你我做起!