一维前缀和:简单来讲就是求前原数组前n个元素的总和,在处理L,r范围的数据总合,我们不可能总是每次都去循环求总合,时间复杂度不允许。
** 推导:递推公式:**
sum[ i ] = arr[i − 1]+sum[ i − 1 ]
此时我们多开一个内存的意义就可以体现出来了,当我们求第一个元素数组的时候需要加上前一个sum 。
但是如果第一个元素前一个位置没有东西就会发生越界访问,因此我们要给他提前准备一个内存并且默认为0。
总的来说,就是为了处理第一个元素越界的问题。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int arr[5] = {1,2,3,4,5};
int sum[6];
sum[0] = 0;
for (int i = 1; i < 6; i++) sum[i] = arr[i - 1] + sum[i - 1];
for (auto i : sum) cout << i << ' ';
return 0;
}
那么输出就是0 1 3 6 10 15
这样我们就可以通过给定的l,r求得这个区间的数据总合。