笔记(前缀和)(一维数组)

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

猜你喜欢

转载自blog.csdn.net/longzaizai_/article/details/120323311