这里有 n 个航班,它们分别从 1 到 n 进行编号。
有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。
请你返回一个长度为 n 的数组 answer,其中 answer[i] 是航班 i 上预订的座位总数。
开始,直观上时直接暴力破解,但超过时间限制了,被教训了,然后就肯定会有隐藏规律。
前缀和可以帮助我们解决这个问题,即我们想要加和到lasti,那我们只要在每行上将lasti + 1这个值减掉 seatsi,即后面的累加和都会是零,就可以解决这个问题。
输入: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
总座位数: 10 45+10 -10 + 55 -10 + 55 -20 -10 + 55 - 20
因此,answer = [10,55,45,25,25]
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
answer = [0] * n
for (first,last,seat) in bookings:
answer[first - 1] += seat
if(last < n):
answer[last] -= seat
for i in range(1,n):
answer[i] += answer[i-1]
return answer