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

79 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

题目描述

给你一个二维整数数组 ranges 和两个整数 left 和 right 。每个 ranges[i] = [starti, endi] 表示一个从 starti 到 endi 的 闭区间 。
如果闭区间 [left, right] 内每个整数都被 ranges 中 至少一个 区间覆盖,那么请你返回 true ,否则返回 false 。
已知区间 ranges[i] = [starti, endi] ,如果整数 x 满足 starti <= x <= endi ,那么我们称整数x 被覆盖了。
来源:力扣(LeetCode)

  • 示例 1
输入:ranges = [[1,2],[3,4],[5,6]], left = 2, right = 5
输出:true
解释:25 的每个整数都被覆盖了:
- 2 被第一个区间覆盖。
- 34 被第二个区间覆盖。
- 5 被第三个区间覆盖。
  • 示例 1
输入: ranges = [[1,10],[10,20]], left = 21, right = 21
输出: false
解释: 21 没有被任何一个区间覆盖。

提示:

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

思路分析

根据题目可知,题目会给出一个二维整数数组ranges和两个整数left和right;这里有数组类型的,必定需要用到循环,这样才能拿到每个元素。这道题可以暴力解决掉它。
因为我们是需要判断闭区间[left, right]内的每一个整数都是在ranges中至少一个区间之中,所以第一步就需要循环区间[left, right],取到区间内的每一个数i;循环二维数组ranges,取到每个区间ranges[j];声明一个flag值,做判断使用;取i和ranges[j]做判断,若是i大于ranges[j]的第一个并且小于ranges[j]最后一个,那么就满足要求,flag赋值为true,并停止当前循环进入下一轮循环,否则不做任何处理,直至循环结束return true出去;若是有一轮循环flag是false,就可以直接return false出去。

AC代码

function solution(ranges, left, right) {
    for( let i=left; i<=right; i++) {
        let flag = false;
        for( let j=0; j< ranges.length; j++) {
            if(ranges[j][0] <= i && i <= ranges[j][ranges[j].length - 1]) {
                flag = true;
                break
            }
        }
        if(flag) {
            continue;
        }else{
            console.log(false);
            return false
        }

    }
    console.log(true);
    return true
}
let ranges = [[1,2],[3,4],[5,6]], left = 4, right = 5;
solution(ranges, left, right);