这里有 n 个航班,它们分别从 1 到 n 进行编号。
有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。
请你返回一个长度为 n 的数组 answer,其中 answer[i] 是航班 i 上预订的座位总数。
示例 1:
输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
输出:[10,55,45,25,25]
解释:
航班编号 1 2 3 4 5
预订记录 1 : 10 10
预订记录 2 : 20 20
预订记录 3 : 25 25 25 25
总座位数: 10 55 45 25 25
因此,answer = [10,55,45,25,25]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/corporate-flight-bookings
暴力破解 - 超时
class Solution:
def corpFlightBookings(self, bookings, n: int):
ans = [0]*n
for i,j,k in bookings:
for m in range(i-1,j):
ans[m]+=k
return ans
增量和 - 通过
https://leetcode-cn.com/problems/corporate-flight-bookings/solution/5118_hang-ban-yu-ding-tong-ji-by-user9081a/
class Solution:
def corpFlightBookings(self, bookings, n: int):
ans = [0]*n
for i,j,k in bookings:
ans[i-1] +=k
if j<n:
ans[j]-=k
for i in range(1,n):
ans[i]+= ans[i-1]
return ans
bookings[0] = [1,2,10] 的时候,增量数组nums=[10,0,-10,0,0]
如果只有这一条预定记录,nums = 前缀和
则:nums = [10,10,0,0,0]
bookings[1] = [2,3,20]的时候,增量数组nums=[10,0+20,-10,0+20,0] = [10,20,-10,-20,0]
只有两条预定记录的时候
nums = [10,10+20,10+20-10,10+20-10-20,10+20-10-20+0] = [10,30,20,0,0]