如何解决查找当前索引到所有其他索引的距离之和
例如,给定一个数组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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。