1109 Flight Booking#
Problem#
There are n
flights that are labeled from 1
to n
.
You are given an array of flight bookings bookings
, where bookings[i] = [first_i, last_i, seats_i]
represents a booking for flights first_i
through last_i
(inclusive) with seats_i
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
.
Examples#
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]
Constraint#
1 <= n <= 2 * 1E4
1 <= bookings.length <= 2 * 1E4
bookings[i].length == 3
1 <= firsti <= lasti <= n
1 <= seatsi <= 1E4
Analysis#
Solution#
def rangeAddition(length, bookings):
difference = [0 for i in range(length)]
for book in bookings:
# note this indexes are 1-based
start, end, addition = book
difference[start-1] += addition
if end < length:
difference[end] -= addition
# reconstruct array
res = [0 for i in range(length)]
res[0] = difference[0]
i = 1
while i < length:
res[i] = res[i-1] + difference[i]
i += 1
return res
length = 5
bookings = [[1,2,10],[2,3,20],[2,5,25]]
print(rangeAddition(length, bookings))
length = 2
bookings = [[1,2,10],[2,2,15]]
print(rangeAddition(length, bookings))
[10, 55, 45, 25, 25]
[10, 25]