Codility - TapeEquilibrium
by ne on 2022-02-16 under Algo/DS/Problems tagged with codility
/**
* A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.
*
* Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].
* The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|
* In other words, it is the absolute difference between the sum of the first part and the sum of the second part.
* For example, consider 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
*
* answer 1
*/
class TapeEquilibrium {
public int solution(int[] A) {
if (A.length == 0) return -1;
int totSum = 0;
for (int i = 0; i < A.length; i++) {
totSum += A[i];
}
int sA = 0;
int sB = 0;
int min = Integer.MAX_VALUE;
for (int i = 1; i < A.length; i++) {
sA += A[i - 1];
sB = totSum - sA;
int m = Math.abs(sA - sB);
if (m <= min) {
min = m;
}
}
return min;
}
}