差分数组是与前缀和数组所对应的一种逆操作,类似于求导和积分,也就是说:
对差分数组求前缀和,可以得到原数组,同样的,对前缀和数组求差分,也可以得到原数组。
差分数组的性质是:
当我们希望对原数组的某一个区间[l,r]
施加一个增量x
时,差分数组diff
对应的变化是:diff[l]
增加x
,diff[r+1]
减少x
,并且这种操作是可以叠加的。
以数组nums
为例
![](https://i-blog.csdnimg.cn/blog_migrate/cbe63ebbdab4d82d93928af2901bbf38.png)
将数组nums
的区间[3,6]
施加一个增量3
时,得到的diff
数组中,diff[3]
增加33
,diff[7]
减少3
。
![](https://i-blog.csdnimg.cn/blog_migrate/58f0713e9230fd325eda67987fa3b66c.png)
LeetCode1109 航班预定统计
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
res = [0] * n
for l, r, seats in bookings:
res[l - 1] += seats
if r < n:
res[r] -= seats
for i in range(1,n):
res[i] += res[i-1]
return res