差分数组
差分数组是与前缀和数组所对应的一种逆操作,类似于求导和积分,也就是说,对差分数组求前缀和,可以得到原数组,同样的,对前缀和数组求差分,也可以得到原数组。[1]
1. 差分数组的定义
给定数组 a[i],差分数组 d[i] 定义为:
d[0] = a[0]d[i] = a[i] - a[i-1]
这相当于除第一项外,差分数组的每一项都是原数组前后两项的差值。
那么从差分数组到原数组的公式为:
d[0] = a[0]a[i] = a[i-1] + d[i]
2. 性质
当我们希望对原数组的某一个区间 [l, r] 施加一个增量 x 时,差分数组 d 对应的变化是:d[l] 增加 x,d[r+1] 减少 x,并且这种操作是可以叠加的。
例如:a = [1, 2, 3, 4, 5, 6],对 a[2] 到 a[4] 之间的所有数加上 ,变为 [1, 2, 6, 7, 8, 6],那么差分数组也就从 [1, 1, 1, 1, 1, 1] 变成了 [1, 1, 4, 1, 1, -2]。
也就是说,当我们需要对原数组的不同区间施加不同的增量,我们只要按规则修改差分数组即可。
Leetcode 刷题笔记——差分数组,知乎,https://zhuanlan.zhihu.com/p/478120079 ↩︎