这周初学算法,学习了一维数组的前缀和,以下是自己的一些理解:
首先它的作用为降低复杂度并且用于大量的对数组分段求和中
例 一个int a[5] = {2,4,1,5,6}数组
他经前缀和操作后变为s[5] = {2,6,7,12,18}
也就是说处了第一项,之后每一项都有s[i] = s[i-1] + a[i];
假如所求区间为(0,4)
因为左区间为0所以直接输出s[4]即为所求
如果左区间不为0 例(1,3)则需输出s[3] - s[1]
以下是代码
#include<iostream>
using namespace std;
const int n=5; //定义常量,不允许修改
int sum[5];
int get_sum(int l,int r)//l为所求左端点,r为所求右端点
{
if(l==0)
return sum[r];
else
return sum[r]=sum[r]-sum[l-1];
}
int main()
{
int a[5]={1,2,5,4,9};
sum[0]=a[0];//第一项直接赋值
for(int i=0;i<5;i++)
{
sum[i]=sum[i-1]+a[i];//求前缀和
}
printf("%d",get_sum(0,4));//直接调用自定义get_sum函数
}