arrays - N次迭代后数组所有元素的总和

标签 arrays sum elements array-difference difference

给定一个数组 arr[ ]={4,6,8,3,6} 数组所有元素的总和 = 27。现在,让我们对数组执行一个操作:-

对于所有 i < length(arr)-1,arr[i]=arr[i]-arr[i+1]

所以现在数组变成了 {-2,-2,5,-3},数组所有元素的总和 = -2

我们再次进行同样的操作,数组变为{0,7,-8},数组所有元素之和=1

因此,我们看到:-

第 0 次迭代后,arr[ ]={4,6,8,3,6}。数组所有元素的总和 = 27

第一次迭代后,arr[ ]={-2,-2,5,-3}。数组所有元素的总和 = -2

在第二次迭代后,arr[ ]={0,-7,8}。数组所有元素的总和 = 1

第三次迭代后,arr[ ]={7,-15}。数组所有元素的总和 = -8

给定一个整数N,问题是确定第N次迭代后数组所有元素的总和。

我已经成功地尝试了蛮力方法,显然它的时间复杂度是二次的。如果可能的话,我正在寻找一种时间复杂度更好的方法,最好是线性的。

最佳答案

一次迭代后,数组元素的总和为:

a[0]-a[1] + a[1]-a[2] + ... + a[n-1]-a[n] = a[0] - a[n]

所以问题简化为在 N-1 次迭代后找到数组的最后一个和第一个元素。

我们有:
N       First element
1       a[0]-a[1]
2       a[0]-a[1]-(a[1]-a[2])              = a[0]-2a[1]+a[2]
3       a[0]-2a[1]+a[2]-(a[1]-2a[2]+a[3])  = a[0]-3a[1]+3a[2]-a[3]

出现了一个模式:第一个元素是 (-1)k C(N,k) a[k] 的总和,其中 k 从 0 到 N。(C(n,k) 是 binomial coefficient )

如果你有一个 O(1) 算法来计算二项式系数,你可以在线性时间内计算 N-1 次迭代后列表的第一个和最后一个元素,N 次迭代后列表的总和就是它们的差。

关于arrays - N次迭代后数组所有元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885465/

相关文章:

javascript - jQuery 数组乘法

javascript - Angular ng-repeat 在 HTML 表中打印数组值

javascript - For 循环中跨度值的总和(在 IE10 中工作)

javascript - 获取子节点的最佳方法

java - Xpath - 如何获取元素的所有属性名称和值

python - Numpy arange float 不一致

c - 数据在 C union 中的位置是否有任何标准?

MySQL SUM 来自具有不同 GROUP BY 的多个列

postgresql计算结果集的总和

.net - Visual Basic 数组的第一个元素