1.前缀和释义:
前缀和就是从位置1到位置i这个区间内的所有的数字之和。
2.公式:
s[i]=s[i-1]+arr[i];
3.具体见如下代码:
#include<bits/stdc++.h>
using namespace std;//前缀和一维
//前缀和释义:
//前缀和就是从位置1到位置i这个区间内的所有的数字之和
//公式:s[i]=s[i-1]+a[i];
const int N=100010;
int arr[N];
int s[N];
int main() {
int n;
cin>>n;
s[0]=0;
for(int i=1; i<=n; i++) {//因为涉及到s[i-1],因此我们将两个数组都以i=1开始
cin>>arr[i];
s[i]=s[i-1]+arr[i];
}
for(int i=1; i<=n; i++) {
cout<<arr[i]<<' ';
}
cout<<endl;
for(int i=1; i<=n; i++) {
cout<<s[i]<<' ';
}
return 0;
}
3.优势:
以(o1)的时间复杂度得到某块区间的总和
4.举例:
比如说要计算arr中区间(l,r)的总和,就可以进行直接计算:
int l,r;
cin>>l>>r;
cout<<endl<<s[r]-s[l-1];
//这里注意s[l-1],左边端点值-1。
5.注意:
计算前缀和数组s时,arr和s下标都要从1开始,因为是要对s[i-1]进行操作,并且对s[0]赋值为0