Off-by-one on range boundaries
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.
Move from brute-force thinking to an efficient approach using array strategy.
There are n flights that are labeled from 1 to n.
You are given an array of flight bookings bookings, where bookings[i] = [firsti, lasti, seatsi] represents a booking for flights firsti through lasti (inclusive) with seatsi seats reserved for each flight in the range.
Return an array answer of length n, where answer[i] is the total number of seats reserved for flight i.
Example 1:
Input: bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5 Output: [10,55,45,25,25] Explanation: Flight labels: 1 2 3 4 5 Booking 1 reserved: 10 10 Booking 2 reserved: 20 20 Booking 3 reserved: 25 25 25 25 Total seats: 10 55 45 25 25 Hence, answer = [10,55,45,25,25]
Example 2:
Input: bookings = [[1,2,10],[2,2,15]], n = 2 Output: [10,25] Explanation: Flight labels: 1 2 Booking 1 reserved: 10 10 Booking 2 reserved: 15 Total seats: 10 25 Hence, answer = [10,25]
Constraints:
1 <= n <= 2 * 1041 <= bookings.length <= 2 * 104bookings[i].length == 31 <= firsti <= lasti <= n1 <= seatsi <= 104Problem summary: There are n flights that are labeled from 1 to n. You are given an array of flight bookings bookings, where bookings[i] = [firsti, lasti, seatsi] represents a booking for flights firsti through lasti (inclusive) with seatsi seats reserved for each flight in the range. Return an array answer of length n, where answer[i] is the total number of seats reserved for flight i.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: Array
[[1,2,10],[2,3,20],[2,5,25]] 5
[[1,2,10],[2,2,15]] 2
zero-array-transformation-ii)zero-array-transformation-iii)Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #1109: Corporate Flight Bookings
class Solution {
public int[] corpFlightBookings(int[][] bookings, int n) {
int[] ans = new int[n];
for (var e : bookings) {
int first = e[0], last = e[1], seats = e[2];
ans[first - 1] += seats;
if (last < n) {
ans[last] -= seats;
}
}
for (int i = 1; i < n; ++i) {
ans[i] += ans[i - 1];
}
return ans;
}
}
// Accepted solution for LeetCode #1109: Corporate Flight Bookings
func corpFlightBookings(bookings [][]int, n int) []int {
ans := make([]int, n)
for _, e := range bookings {
first, last, seats := e[0], e[1], e[2]
ans[first-1] += seats
if last < n {
ans[last] -= seats
}
}
for i := 1; i < n; i++ {
ans[i] += ans[i-1]
}
return ans
}
# Accepted solution for LeetCode #1109: Corporate Flight Bookings
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
ans = [0] * n
for first, last, seats in bookings:
ans[first - 1] += seats
if last < n:
ans[last] -= seats
return list(accumulate(ans))
// Accepted solution for LeetCode #1109: Corporate Flight Bookings
impl Solution {
#[allow(dead_code)]
pub fn corp_flight_bookings(bookings: Vec<Vec<i32>>, n: i32) -> Vec<i32> {
let mut ans = vec![0; n as usize];
// Build the difference vector first
for b in &bookings {
let (l, r) = ((b[0] as usize) - 1, (b[1] as usize) - 1);
ans[l] += b[2];
if r < (n as usize) - 1 {
ans[r + 1] -= b[2];
}
}
// Build the prefix sum vector based on the difference vector
for i in 1..n as usize {
ans[i] += ans[i - 1];
}
ans
}
}
// Accepted solution for LeetCode #1109: Corporate Flight Bookings
// Auto-generated TypeScript example from java.
function exampleSolution(): void {
}
// Reference (java):
// // Accepted solution for LeetCode #1109: Corporate Flight Bookings
// class Solution {
// public int[] corpFlightBookings(int[][] bookings, int n) {
// int[] ans = new int[n];
// for (var e : bookings) {
// int first = e[0], last = e[1], seats = e[2];
// ans[first - 1] += seats;
// if (last < n) {
// ans[last] -= seats;
// }
// }
// for (int i = 1; i < n; ++i) {
// ans[i] += ans[i - 1];
// }
// return ans;
// }
// }
Use this to step through a reusable interview workflow for this problem.
Two nested loops check every pair or subarray. The outer loop fixes a starting point, the inner loop extends or searches. For n elements this gives up to n²/2 operations. No extra space, but the quadratic time is prohibitive for large inputs.
Most array problems have an O(n²) brute force (nested loops) and an O(n) optimal (single pass with clever state tracking). The key is identifying what information to maintain as you scan: a running max, a prefix sum, a hash map of seen values, or two pointers.
Review these before coding to avoid predictable interview regressions.
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.