差分数组(线性一维)
差分数组:将数组相邻两两做差 最后补上原数组的第一个元素
得到差分数组后,从左到右累加 可以得到原来的数组
有什么用?
如果在原数组的一段连续子数组加上或减去一个值,再次两两作差,并在前面补上原数组的第一个元素,就可以发现只有两个差分数组的下标值发生变化
换句话说,对原数组a的[i,j]区间做加法减法操作,等价于在其差分数组d上d[i]+1 d[j+1]-1 因为中间的会减去这个相同的值,只会影响两边的值
差分数组:
- 从左到右累加d中的元素,得到原数组a
- 把a[i],a[i+1]....a[j]加上x
等价于把d[i]+x,d[j+1]-x
这样子,就可以用O(1)的时间完成对子数组a的操作
最后用(1)还原出原数组