在数组中查找索引 给出它之前和之后的总和

finding an index in array the gives a sum before and after it?

本文关键字:之后 数组 查找 索引      更新时间:2023-10-16

给定一个数组,我想找到一个索引,它前面的数字和它后面的数字给出相等的总和。

例如,像这样的数组 [4,5,6,11,7,8]

输出是索引3,因为4+5+6 = 7+8

首先找到所有项目的总和,将其保存为sum,然后从数组的开头读取并汇总项目到达(sum - current index value)/2,如果你没有得到这样的结果,意味着没有这样的索引,如果你在迭代的每个索引中得到sum/2,意味着相关索引是你的答案。

示例:4,5,6,11,7,8 总和 = 41。

check index 0: currentSum  = 4, currentSum - currentValue = 4-4 != (41 - 4)/2
check index 1: currentSum  =  9, currentSum - currentValue = 9-5 != (41 - 5)/2
check index 2: currentSum  = 15, currentSum - currentValue = 15-6 != (41 - 6)/2
check index 3: currentSum  = 26, currentSum - currentValue = 15 == (41 - 11)/2

创建(包含)前缀总和数组(这需要 O(n) 步)

然后对于每个索引0 < i < n,检查是否prefixsum[i - 1] == prefixsum[n - 1] - prefixsum[i],如果true则返回i。(也采取 O(n) 步长)。


您可以更轻松地执行此操作(并且空间更少):

计算数组的总和。O(n)

然后,遍历数组,跟踪前缀总和(这次是非独占)。比较prefixsum == sum - (prefixsum + current) .如果为 true,则返回当前索引。也是 O(n)。

本质上,它的作用与上述相同,但避免将前缀总和保存在数组中。

尝试构建范围总和段树?检查每个节点,如果它们的左/右子节点相等,则返回其索引。也许矫枉过正。