【算法笔记】一维前缀和
用途:计算某个数组区间的和
实现:另开一个数组,用来存放第i个位置之前所有元素的和(包含第i个元素)
即:prefix[ i ]=prefix[i-1]+cur[i];
例题:
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
//输入盒子数量
long long n;
cin>>n;
//输入盒子中巧克力数量
const int N = n+1;
long long arr[N];
for(int i=1;i<N;i++){
cin>>arr[i];
}
arr[0]=0;
//计算前缀和
long long prefix[N];
prefix[0]=0;
for(long long i=1;i<N;i++){
prefix[i]=arr[i]+prefix[i-1];
}
//计算后缀和
long long surfix[N];
surfix[0]=0;
for (long long i=1,j=n;j>=1;j--,i++){
surfix[i]=surfix[i-1]+arr[j];
}
//输出结果
long long maxresult=0;
long long left=1,right=1;
while(left+right<=n){
if(prefix[left]<surfix[right]){
left++;
}
else if(prefix[left]>surfix[right]){
right++;
}
else{
maxresult=max(maxresult,prefix[left]);
left++;
right++;
}
}
cout<<maxresult<<endl;
return 0;
}
注意longlong替换int,防止出现大数据