一、题目:检查是否区域内所有整数都被覆盖
1、描述
给你一个二维整数数组 ranges
和两个整数 left
和 right
。每个
r
a
n
g
e
s
[
i
]
=
[
s
t
a
r
t
i
,
e
n
d
i
]
ranges[i] = [start_{i}, end_{i}]
ranges[i]=[starti,endi] 表示一个从
s
t
a
r
t
i
start_{i}
starti 到
e
n
d
i
end_{i}
endi 的闭区间。如果闭区间
[
l
e
f
t
,
r
i
g
h
t
]
[left, right]
[left,right] 内每个整数都被
r
a
n
g
e
s
ranges
ranges 中至少一个区间覆盖,那么请你返回
t
r
u
e
true
true,否则返回
f
a
l
s
e
false
false。
已知区间
r
a
n
g
e
s
[
i
]
=
[
s
t
a
r
t
i
,
e
n
d
i
]
ranges[i] = [start_{i}, end_{i}]
ranges[i]=[starti,endi],如果整数
x
x
x 满足
s
t
a
r
t
i
≤
x
≤
e
n
d
i
start_{i} \leq x \leq end_{i}
starti≤x≤endi,那么我们称整数
x
x
x 被覆盖了
2、提示
- 1 <= ranges.length <= 50
- 1 <= starti <= endi <= 50
- 1 <= left <= right <= 50
3、示例
- 示例一
输入:ranges = [[1,2],[3,4],[5,6]], left = 2, right = 5
输出:true
解释:2 到 5 的每个整数都被覆盖了:
- 2 被第一个区间覆盖。
- 3 和 4 被第二个区间覆盖。
- 5 被第三个区间覆盖。
- 示例二
输入:ranges = [[1,10],[10,20]], left = 21, right = 21
输出:false
解释:21 没有被任何一个区间覆盖。
二、解题
1、思路
-
因为 ≤ l e f t ≤ r i g h t ≤ 50 \leq left \leq right \leq 50 ≤left≤right≤50 (50是比较小的数),可以声明一个大小为 51 51 51 值为 0 0 0 的记录数组
res
。res
的下标就表示闭区间 [ l e f t , r i g h t ] [left, right] [left,right] 中间的整数,res
的值为value
,value = 1
表示该整数存在,value = 0
,则表示该整数不存在。 -
用
foreach()
方法遍历二维数组ranges
,得到每一个一维数组range
。用Arrays.fill()
方法将res[range[0]]
到res[range[0]+1]
的value
置为 1 1 1。 -
设 x x x 是 [ l e f t , r i g h t ] [left, right] [left,right]之间的数,如果
res[x] == 1
,则表示 x x x 被覆盖。
2、代码
class Solution {
public boolean isCovered(int[][] ranges, int left, int right) {
int[] res = new int[51];
for(int[] range:ranges){
Arrays.fill(res,range[0],range[1]+1,1);
}
for(int j=left;j<=right;j++){
if(res[j]!=1)
return false;
}
return true;
}
}