Skip to content
ΣDSA Patterns
Menu
Language

Difference Array

Guide 3 of 6 · Path 3 of 6

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

Corporate Flight Bookings

Problem (restated)

n flights numbered 1..n. Bookings [first, last, seats] reserve seats on inclusive range. Return seats for each flight.

Intuition

Classic difference array: +seats at first-1, -seats at last, then prefix sum.

Approaches

Difference array

Tested only
Time O(n + m)Space O(n)

Idea. diff[l-1]+=s; if r is less than n: diff[r]-=s; prefix rebuild.

Walkthrough. n=5, bookings=[[1,2,10],[2,3,20],[2,5,25]] → [10,55,45,25,25].

Trade-offs. Segment tree overkill for offline range adds.

Solution
export function corpFlightBookings(bookings: number[][], n: number): number[] {
  const diff = new Array(n).fill(0);
  for (const [f, l, s] of bookings) {
    diff[f! - 1]! += s!;
    if (l! < n) diff[l!]! -= s!;
  }
  for (let i = 1; i < n; i++) diff[i]! += diff[i - 1]!;
  return diff;
}
export function corpFlightBookings(bookings: number[][], n: number): number[] {
  const diff = new Array(n).fill(0);
  for (const [f, l, s] of bookings) {
    diff[f! - 1]! += s!;
    if (l! < n) diff[l!]! -= s!;
  }
  for (let i = 1; i < n; i++) diff[i]! += diff[i - 1]!;
  return diff;
}

Template connection

Difference-array template for many range updates.

Reflection