在数组中查找索引 给出它之前和之后的总和
finding an index in array the gives a sum before and after it?
给定一个数组,我想找到一个索引,它前面的数字和它后面的数字给出相等的总和。
例如,像这样的数组 [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)。
本质上,它的作用与上述相同,但避免将前缀总和保存在数组中。
尝试构建范围总和段树?检查每个节点,如果它们的左/右子节点相等,则返回其索引。也许矫枉过正。
相关文章:
- strncpy之后的char数组的错误行为
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 将它们添加到C 中的JSONCPP模块中的数组之后
- 直接在数组之后放置字符的可靠方法
- 分段错误发生在索引离开C++数组边界之后
- 如何在FFT之后设置我的数组的频带
- 为什么要指向数组或向量中最后一个元素之后的内存位置
- 输入int之后的字符的c++输入数组
- 我什么时候应该使用删除?(在动态创建的2D数组之后未删除的后果)
- 如何在2D数组中每行之后进入下一行
- C++ 中 15000 数组索引之后的不相关整数标准输入
- 在数组中查找索引 给出它之前和之后的总和
- 结构数组索引 在第一个索引之后未填充
- cudaMemcpy之后数组的值
- 传递引用以修改数组之后,为什么它保持不变
- 如何在第 "." 点之后将数字放入数组中
- 仅读取文本文件中的数字并存储在数组中.之后,读取第一行来存储在数组中
- 在从循环中动态获得的值之后向数组中添加一个元素
- 在相同类型的数组成员之后对齐
- 在字符数组中查找前一个字符之后的字符