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

时间:2013-06-02 17:38:26

标签: arrays sum elements array-difference difference

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

对于所有我< 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

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

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

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

1 个答案:

答案 0 :(得分:10)

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

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个迭代后的列表总和就是差值那些。