前缀和和差分

175 阅读1分钟

一维前缀和

前缀和数组里保存的就是前 n 项的和

f019e7e1264d46588a02170e4a774e96.png

我们通过前缀和数组保存 前 n 位的和,presum[1]保存的就是 nums 数组中前 1 位的和,也就是 presum[1] = nums[0], presum[2] = nums[0] + nums[1] = presum[1] + nums[1].

依次类推,所以我们通过前缀和数组可以轻松得到每个区间的和

1f4dbc2f86e44f86bce78600b47b50dc.png

  • 一维数组 A
  • 前缀和数组 S
for(int i = 0; i < A.length; i++) {
    S[i + 1] = S[i] + A[i];
}
  • 字段和 sum[l, r] = S[r+1] - S[l],这里的 l,r 表示数组 A 的下标
  • 当 A 中都是非负数,前缀和数组 S 单调递增