查找当前索引到所有其他索引的距离之和

问题描述

例如,给定一个数组arr(0,1,1),如果值是1,我需要找到所有其他索引到当前索引的距离之和。例如,我在O(n ^ 2)表示法,但是我知道我可以在O(n)中做到。

arr = [0,1]
for(i = 0; i < arr.length; i++) {
   sum = 0;
   for(j = 0; j < arr.length; j++) {
      if(arr[j] == 1 && j != i) {
         sum += Math.abs(j - i);
      }
   }
   return_arr[i] = sum;
}

(不使用任何特定语言)

距离用 j - i 的绝对值表示。

解决方法

无论值是否为1,任何索引i左侧的值的数量均为i,而其右侧的值的数量为n-1-i,其中n为数组的长度。

您知道前n个自然数的总和,即1,2,3,... n为n(n + 1)/ 2

您对左边的索引数求和= i(i + 1)/ 2

右边的索引总数=(n-i-1)(n-i)/ 2

将两个总和相加得到一个索引= i(i + 1)/ 2 +(n-i-1)(n-i)/ 2的总和

对每个值为1的索引执行此操作。

伪代码:

GetSumAtEachIndex(arr) {
    n = arr.length
    sum = array(n)
    for ( i = 0; i < arr.length; i++ ) {
        if ( arr[i] == 1 ) {
           sum[i] = i*(i+1)/2 + (n-i-1)*(n-i)/2;
        }
    }
    return sum;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...