1109. 航班预订统计
方法一:超时
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
ans = []
for i in range(1, n+1):
res = 0
for a, b, x in bookings:
if i in range(a, b+1):
res += x
ans.append(res)
return ans方法二:超时
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
ans = [0] * n
for a, b, x in bookings:
for i in range(a, b+1):
ans[i-1] += x
return ans方法三:差分
原数组和差分数组分别为 x,y:
y[i] = x[i] - x[i-1] # 可覆盖 x,在原数组的基础上得到差分数组。
x = accumulate(y) # 前缀和与差分一个加(和)一个减(差)数组 第
项加
,相对于前缀和数组
从第
项开始逐个加
,对于区间
而言,从第
y[l] += inc
y[r+1] -= inc对于区间的修改就变为了对于两个位置的修改。最后返回前缀和数组。
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
res = [0] * n
for a, b, x in bookings:
res[a-1] += x # 注意 res 索引从 0 开始到 n-1,相应的 a 和 b 需要减一。
if b < n: # 考虑越界
res[b-1+1] -= x
return list(accumulate(res))
















