一维前缀和的定义
我们设前缀和数组是sum数组,输入的数组是a,数组的长度是n。
那么代表的就是a数组的前i项之和。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,a[10001],sum[10001];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],sum[i]=sum[i-1]+a[i];
cout<<"前缀和数组是:"<<endl;
for(int i=1;i<=n;i++)cout<<sum[i]<<' ';
return 0;
}
结果如下:
一维前缀和的作用
一维前缀和的定义我们讲完了,那它有什么作用呢?
它的作用是可以用的时间复杂度来求出一段数的和。
比如我们输入一个数组,输出第个数字的和。
我们用暴力做是这样的:
#include<bits/stdc++.h>
using namespace std;
int n,a[10001],x,y,sum;
int main()
{
cin>>n>>x>>y;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=x;i<=y;i++)sum+=a[i];
cout<<sum;
return 0;
}
输出结果如下:
其实我们如果用前缀和的话,就可以用一句话就可以解决这个问题:
为什么??????
我们画两个图:
将,就得到了:
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,a[10001],x,y,sum[10001];
int main()
{
cin>>n>>x>>y;
for(int i=1;i<=n;i++)cin>>a[i],sum[i]=sum[i-1]+a[i];
cout<<sum[y]-sum[x-1];
return 0;
}
在很多要输出一个区间和的这种题目下,前缀和绝对是最快的!