【问题标题】:Sum of all elements of an array after N iterationsN次迭代后数组所有元素的总和
【发布时间】:2013-05-28 22:31:19
【问题描述】:

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

对于所有i

所以现在数组变成了{-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次迭代后数组所有元素的总和。

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

【问题讨论】:

    标签: arrays sum elements array-difference difference


    【解决方案1】:

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

    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 次迭代后列表的总和只是那些。

    【讨论】:

    • 漂亮而精确。只是没有足够的声誉来支持您的答案:)
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2015-02-24
    • 2023-01-30
    • 1970-01-01
    • 2023-02-22
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多