Get the Maximum Score

Overview

Hard 1 solution

Categories

ArrayTwo PointersDynamic ProgrammingGreedy
package array.iterative;

public class GetTheMaximumScore {

    private static final int MODULO = 1_000_000_007;

    public int maxSum(int[] a, int[] b) {

        int aPtr    = 0;
        int bPtr    = 0;

        long bSum   = 0;
        long aSum   = 0;
        long maxSum = 0;

        while (aPtr < a.length && bPtr < b.length) {

            if (a[aPtr] == b[bPtr]) {
                maxSum += Math.max(aSum, bSum) + a[aPtr];

                aSum = bSum = 0;
                aPtr++;
                bPtr++;
                continue;
            }

            if (a[aPtr] < b[bPtr]) aSum += a[aPtr++];
            else                   bSum += b[bPtr++];
        }

        while (aPtr < a.length) aSum += a[aPtr++];
        while (bPtr < b.length) bSum += b[bPtr++];

        return (int) ((maxSum + Math.max(aSum, bSum)) % MODULO);
    }

}