前缀和算法

发布时间 2023-03-22 21:15:36作者: ChuenSan

前缀和算法

什么是前缀和?

前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而拆分可以看成前缀和的逆运算。合理的使用前缀和与拆分,可以将某些复杂的问题简单化。

image-20230322201658252

具体做法:

首先做一个预处理,定义一个sum[]数组,sum[i]代表a数组中前i个数的和。

求前缀和运算:

for(int i = 1;i <= n; i++)
{ 
    sum[i] = sum[i - 1] + a[i];   
}

查询操作:

printf("%d\n", sum[r] - sum[l - 1]);

原理

sum[r] = a[1] + a[2] + a[3] + a[l-1] + a[l] + a[l + 1] ...... a[r];
sum[l - 1] = a[1] + a[2] + a[3] + a[l - 1];
sum[r] - sum[l - 1] = a[l] + a[l + 1] + ......+ a[r];

image-20230322202115740

这样,对于每个询问,只需要执行 sum[r] - sum[l - 1]。输出原序列中从第l个数到第r个数的和的时间复杂度变成了O(1)

我们把它叫做一维前缀和

总结:

image-20230322202216640

参考文章:前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)_林小鹿@的博客-CSDN博客