定義
差分數列是通過一種儲存相鄰元素之間的差值來表示序列的數據結構。它通常用於處理區間更新問題,能夠在某縣情況下大大提高效率。
差分數列的基本原理:
假設有一個數組 A ,其大小為 n 。差分數組 D 是一個大小為 n 的新數組。
定義為:
D[0] = A[0](差分数组的第一个元素就是原数组的第一个元素)- 对于
i > 0,D[i] = A[i] - A[i-1](差分数组的其他元素是原数组相邻元素的差)
應用
- 區間更新:如果要对原数组的某个区间加上一个常数
k,只需要更新差分数组的两个位置,这样就能快速得到更新后的数组。 例如,对于数组A,我们要对区间[i, j]的所有元素加上k:D[i] += kD[j+1] -= k(如果j+1在数组范围内) 之后,通过差分数组D恢复更新后的数组A。
- 快速恢复原数组:给定差分数组
D,可以通过累加的方式恢复出原数组A。
差分数组的这种方法在区间更新频繁的场合特别有效,能够节省大量时间复杂度。
// 根据原数组构造差分数组
const nums = [1,3,3,5,8]
const n = nums.length
const diff = Array.from({ length: n }, () => 0)
diff[0] = nums[0]
for(let i=1; i<n; i++){
diff[i] = diff[i] - diff[i-1]
}