Skip to content
ΣDSA Patterns
Menu
Language

Difference Array

Guide 4 of 6 · Path 4 of 6

Demo preview: These solutions pass the automated test suite but have not been human-reviewed. Treat trade-offs and prose as draft.

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 only
Time 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