Codility - TapeEquilibrium  

by ne on 2022-02-16 under Algo/DS/Problems tagged with codility

Hi,
The problem description is in the comments above the solution below.

The problem belongs to Codility, you can try out it yourself on their platform.


/**
 * 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;
    }
}