algorithm - 给定序列的平衡索引 : What is the best algorithm to find one?

标签 algorithm language-agnostic math

序列的平衡索引是这样的索引,即较低索引处的元素总和等于较高索引处元素的总和。例如,在序列 A 中:

A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0

3 是均衡指数,因为:

A[0]+A[1]+A[2]=A[4]+A[5]+A[6]

6 也是一个均衡指数,因为:

A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0

(零元素之和为零) 7不是一个均衡指标,因为它不是序列A的有效指标。 如果你还有疑问,这是一个精确的定义:整数k是一个序列的平衡指数当且仅当和。

假设零元素之和为零。写一个函数

int equi(int[] A);

给定一个序列,返回其平衡索引(任意)或 -1 如果不存在平衡索引。假设序列可能很长。

最佳答案

  1. 计算A中所有元素的总和
  2. 对于每个索引i,计算从A[0]A[i - 1]的元素之和,直到总和等于 (totalSum - A[i])/2

请注意,从 A[0]A[i - 1] 的元素总和可以作为运行总计进行跟踪,这意味着整个算法是 O(n)。作为代码实现留给读者作为练习。

关于algorithm - 给定序列的平衡索引 : What is the best algorithm to find one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4609955/

相关文章:

c++ - 实现堆排序

Javascript 滚动高度百分比数学

java - 将数字缩放为 <= 255?

c# - 为什么 Quaternion.FromToRotation(rotation * axis, axis) * rotation 可以限制一个自由度?

c# - XNA Sprite 旋转点

python - DFS打印python中字符串的所有排列

最大化幸福的算法

algorithm - 这是整数规划吗?

language-agnostic - 如何测试矩阵是否是对角线?

算法 - 找到代表所有行的最小单元格子集