查找用于多次存储阵列的特定元素总和的算法

时间:2016-08-18 03:30:19

标签: arrays algorithm iteration storing-data

在欧拉计划中解决问题15,我正在努力解决算法实施的最后一个问题。我错过了最后一步。我正在使用Java,但我只需要了解一般的想法。

假设我们有一个原始数组,例如n = 20:

    long[] a = new long[20]; 

存储在数组中的数字直接决定下一个数字序列(或此上下文中的路由)。更清楚的是,让我举一个例子说明我的意思:

假设我们有这样的订单:

    a[19] = ... ;
    a[18] = ... ;
    ...
    ...
    a[0] = ... ;

下一个序列元素应如下所示:

   long[] b = new long[20]      

   for(int i = a.length - 1; i >= 0; i--){

    b[19] += a[i]; 

    }

    for(int i = a.length - 2 ; i >= 0; i--){

    b[18] += a[i]; 

    }
   ...

根据上面的顺序,序列数组b的顶部元素总是数组a的所有元素的总和。 top元素下面的元素存储所有数组a的元素,除了顶部元素。所以它基本上是按降序/升序对它们进行求和。因此b [0] = a [0]。接下来的序列元素将是数组b的元素之和,依此类推......

问题在于我需要能够对任意网格重复这n次。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

试试这个

long[] b = new long[20];
b[0] = a[0];

for(int i = 1; i < b.length; i++){
    b[i] = b[i-1] + a[i]; 
}

以上实用程序此关系b(n) = b(n-1) + a(n)