You are given a 2D integer array ranges and two integers left and right.
Each ranges[i] = [starti, endi] represents an inclusive interval between starti and endi.
Return trueif each integer in the inclusive range[left, right]is covered byat least one interval inranges. Return falseotherwise.
An integer x is covered by an interval ranges[i] = [starti, endi] if starti <= x <= endi.
Input: ranges =[[1,2],[3,4],[5,6]], left =2, right =5Output: trueExplanation: Every integer between 2 and 5is covered:-2is covered by the first range.-3 and 4 are covered by the second range.-5is covered by the third range.
If we mark all the numbers covered by the given ranges, we can quickly check if every number in [left, right] is covered. Using a prefix sum array allows us to efficiently mark and check coverage for all numbers in the range.
classSolution {
public:bool isCovered(vector<vector<int>>& ranges, int left, int right) {
int cover[52] = {0};
for (auto& r : ranges) {
cover[r[0]]++;
cover[r[1]+1]--;
}
for (int i =1; i <52; ++i) cover[i] += cover[i-1];
for (int i = left; i <= right; ++i) {
if (cover[i] ==0) return false;
}
return true;
}
};
classSolution {
publicbooleanisCovered(int[][] ranges, int left, int right) {
int[] cover =newint[52];
for (int[] r : ranges) {
cover[r[0]]++;
cover[r[1]+1]--;
}
for (int i = 1; i < 52; ++i) cover[i]+= cover[i-1];
for (int i = left; i <= right; ++i) {
if (cover[i]== 0) returnfalse;
}
returntrue;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
classSolution {
funisCovered(ranges: Array<IntArray>, left: Int, right: Int): Boolean {
val cover = IntArray(52)
for (r in ranges) {
cover[r[0]]++ cover[r[1]+1]-- }
for (i in1 until 52) cover[i] += cover[i-1]
for (i in left..right) {
if (cover[i] ==0) returnfalse }
returntrue }
}
1
2
3
4
5
6
7
8
9
10
11
defisCovered(ranges: list[list[int]], left: int, right: int) -> bool:
cover: list[int] = [0] *52for s, e in ranges:
cover[s] +=1 cover[e+1] -=1for i in range(1, 52):
cover[i] += cover[i-1]
for i in range(left, right+1):
if cover[i] ==0:
returnFalsereturnTrue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
impl Solution {
pubfnis_covered(ranges: Vec<Vec<i32>>, left: i32, right: i32) -> bool {
letmut cover = [0; 52];
for r in ranges.iter() {
cover[r[0] asusize] +=1;
cover[(r[1]+1) asusize] -=1;
}
for i in1..52 {
cover[i] += cover[i-1];
}
for i in left..=right {
if cover[i asusize] ==0 {
returnfalse;
}
}
true }
}