【发布时间】:2016-01-27 07:47:10
【问题描述】:
给出了一个由 N 个整数组成的零索引数组 A。该数组的平衡索引是任何整数 P 使得 0 ≤ P
例如,考虑以下由 N = 8 个元素组成的数组 A:
A[0] = -1
A[1] = 3
A[2] = -4
A[3] = 5
A[4] = 1
A[5] = -6
A[6] = 2
A[7] = 1
P = 1 是这个数组的平衡索引,因为:
A[0] = −1 = A[2] + A[3] + A[4] + A[5] + A[6] + A[7]
P = 3 是这个数组的平衡索引,因为:
A[0] + A[1] + A[2] = −2 = A[4] + A[5] + A[6] + A[7]
P = 7 也是一个均衡指标,因为:
A[0] + A[1] + A[2] + A[3] + A[4] + A[5] + A[6] = 0
并且没有索引大于 7 的元素。
P = 8 不是均衡指标,因为它不满足条件 0 ≤ P
现在我要写一个函数:
int solution(int A[], int N);
给定一个由 N 个整数组成的零索引数组 A,返回它的任何平衡索引。如果不存在均衡指数,该函数应返回 -1。
例如,给定上面显示的数组 A,函数可能返回 1、3 或 7,如上所述。
假设:
N is an integer within the range [0..100,000];
each element of array A is an integer within the range [−2,147,483,648..2,147,483,647].
这里有一些复杂性:
Elements of input arrays can be modified.
【问题讨论】:
-
一种方法是依次遍历每个元素,并将其左右的元素相加,看看左右和是否相等:如果相等,那就是一个平衡点,你可以停下来;否则,移动到下一个元素并重试。尝试先实现它。对于大 N 来说效率不高,但这是一个开始。
-
因为可以修改输入数组的元素。这就是为什么我们不需要专门限制数组
-
从左右和开始。左边从零开始,右边是从索引 1 到 N-1 的项目的总和。从 1 到 N-2 循环遍历数组并将 N-1 值添加到左侧并减去 N+1 值到右侧。检查它们是否相等。如果是,则返回 N,否则继续。您还需要检查初始右和是否在开头为 0 并返回 0,或者左和是否在末尾为 0 并返回 N-1。
-
哪种语言?例如,Java 有 ArrayList,但 C 和 C++ 没有。语言决定了可以轻松使用的数据结构。
标签: java c++ arrays algorithm data-structures