Codility MaxSliceSum Java  

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


/**
 *  non-empty array A consisting of N integers is given. A pair of integers (P, Q), 
 *  such that 0 ≤ P ≤ Q < N, is called a slice of array A. The sum of a slice (P, Q) is the total of A[P] + A[P+1] + ... + A[Q].
 *
 * Write a function:
 *
 * class Solution { public int solution(int[] A); }
 *
 * that, given an array A consisting of N integers, returns the maximum sum of any slice of A.
 *
 * For example, given array A such that:
 *
 * A[0] = 3  A[1] = 2  A[2] = -6
 * A[3] = 4  A[4] = 0
 * the function should return 5 because:
 *
 * (3, 4) is a slice of A that has sum 4,
 * (2, 2) is a slice of A that has sum −6,
 * (0, 1) is a slice of A that has sum 5,
 * no other slice of A has sum greater than (0, 1).
 */
public class MaxSliceSum {
    public int solution(int[] arr) {
        if (arr == null || arr.length == 0) return 0;
        long msum = arr[0], sum = arr[0];

        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > sum && sum < 0) {
                sum = arr[i];
            } else {
                sum += arr[i];
            }
            if (msum <= sum) {
                msum = sum;
            }
        }
        return (int) msum;
    }

    public static void main(String... args) {
        System.out.println(new MaxSliceSum().solution(new int[]{-1, 3, 7, -6, 14, 0}));
        System.out.println(new MaxSliceSum().solution(new int[]{-10}));
        System.out.println(new MaxSliceSum().solution(new int[]{-10, -9, -8, -7, -1}));
    }
}