携手创作,共同成长!这是我参与「掘金日新计划 · 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
解释:2 到 5 的每个整数都被覆盖了:
- 2 被第一个区间覆盖。
- 3 和 4 被第二个区间覆盖。
- 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);