给定数组的所有元素的数组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次迭代后确定数组中所有元素的总和。
我已成功尝试过蛮力方法,显然时间复杂度是二次方的。我正在寻找一种具有更好时间复杂度的方法,如果可能的话,最好是线性的。
答案 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个迭代后的列表总和就是差值那些。