TapeEquilibrium
A non-empty zero-indexed array A is given consisting of N integers. On a tape, Array A represents numbers. Any integer P, such as such that 0 < P < N, divides the tape into two non-empty sections: A\[0], A\[1], …, A\[P − 1], A\[P], A\[P + 1], …, A\[N − 1]. The value of the difference between the two components is: |(A\[0] + A\[1] + … + A\[P − 1]) − (A\[P] + A\[P + 1] + … + A\[N − 1])|| It is the total difference, in other words, between the sum of the first part and the sum of the second part.
For example, in array A such that:
A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3
We can split this tape in four places:
*P = 1, difference = |3 − 10| = 7
*P = 2, difference = |4 − 9| = 5
*P = 3, difference = |6 − 7| = 1
*P = 4, difference = |10 − 3| = 7
Write a function:
int solution(int A[], int N);
that, given a non-empty array A of N integers, returns the minimal difference that can be achieved.
For example, given:
A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3
the function should return 1, as explained above.
Let’s write an efficient algorithm for the following assumptions:
- N is an integer within the range [2..100,000];
- each element of array A is an integer within the range [−1,000..1,000].
Solution:
|
|