Mediumdifference-array
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 onlyTime 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
- Which pattern gave this away within 90 seconds?
- What changed from the standard template?
- What would break the current solution?