菜姬的算法小课堂开课了!!!今天,菜姬老师给大家讲的内容是“前缀和”。
"前缀和" 的定义:数列的前n项的和。
前缀和是一种重要的预处理,能大大降低查询的时间复杂度。 我们可以简单理解为"数列的前n项的和"。 这个概念其实很容易理解,即一个前缀和数组中,第n位存储的是原数组前n个数字的和。
在这里我默认大家对高中的数学基本知识还有印象,那么前缀和以高中学的数列来表示就是![]()
当然,在编程里我们不需要记忆什么求和公式,而且基本上所有前缀和(一维)的求解形式都是一样的。
形式来讲,假如我们有一个长度为n的数组a,数组a的每一项都有一个初始值,那么求解这个数组的前缀和方式为:
使用 for 循环从前往后遍历,对于当前下标x,我们需要进行a[x] += a[x - 1]操作,这样循环下来就能取得数组的前缀和数组,通俗来说对于一个初始的数组,如果我们需要求解前缀和数组第x项,那么这个第x项显然值为原数组a的前x项和,即我们求解时可以用原数组a前x - 1项和加上我们a数组第x项。
当然以上求出的前缀和数组会覆盖原数组a,如果大家想保留原数组我们可以用新数组S代表前缀和数组。同理,求解S的方式类似,我们只需要令S[x] = S[x - 1] + a[x],需要注意的是S1= a1。
总而言之,本节并不是想让大家具体掌握前缀和知识,只是想提前让大家了解一下。因此,我们的问题相对来说会很简单。那么来让我们练练手吧:
假设我们有一个长度为n的数组,请求出数组的前缀和数组,并输出每一项。
第一行输入一个n( 1 ≤ n≤105)
接下来有n行,每一行输入一个整数ai
保证![]()
4 1 1 1 1
1 2 3 4