Easydifference-array
Check if All the Integers in a Range Are Covered
Problem (restated)
Given ranges covering integers in [1,50], return true if every integer in [left, right] is covered by at least one range.
Intuition
Difference array of coverage counts; prefix > 0 for every point in [left, right].
Approaches
Coverage via difference array
Tested onlyTime O(n + U)Space O(U)
Idea. +1 at start, -1 at end+1. Scan 1..50 with running coverage.
Walkthrough. ranges=[[1,2],[3,4],[5,6]], left=2,right=5 → true.
Trade-offs. Domain is tiny (50); brute loop per range also fine.
Solution
export function isCovered(ranges: number[][], left: number, right: number): boolean {
const diff = Array(52).fill(0);
for (const r of ranges) {
diff[r[0]!]!++;
diff[r[1]! + 1]!--;
}
let cur = 0;
for (let i = 1; i <= 50; i++) {
cur += diff[i]!;
if (i >= left && i <= right && cur <= 0) return false;
}
return true;
}
export function isCovered(ranges: number[][], left: number, right: number): boolean {
const diff = Array(52).fill(0);
for (const r of ranges) {
diff[r[0]!]!++;
diff[r[1]! + 1]!--;
}
let cur = 0;
for (let i = 1; i <= 50; i++) {
cur += diff[i]!;
if (i >= left && i <= right && cur <= 0) return false;
}
return true;
}
Template connection
Difference array for range coverage.
Reflection
- Which pattern gave this away within 90 seconds?
- What changed from the standard template?
- What would break the current solution?