Home

The Maximum Subarray

Detailed explanation coming soon!

import java.util.*;
import java.lang.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int tests = in.nextInt();
        for(int i = 0; i < tests; i++){
            printMaxes(in.nextInt());
        }
    }

    public static void printMaxes(int length){
        int currentSum = in.nextInt();
        int maxContSum = currentSum;
        int maxSum = (currentSum > 0) ? currentSum : 0;
        int maxNum = currentSum;
        for(int i = 1; i < length; i++){
            int n = in.nextInt();
            if(n > 0){
                maxSum += n;
            }
            if(n > maxNum){
                maxNum = n;
            }

            currentSum = Math.max(currentSum + n, n);
            maxContSum = Math.max(currentSum, maxContSum);
        }

        if(maxSum == 0){
            maxSum = maxNum;
        }

        System.out.println(maxContSum + " " + maxSum);
    }

    public static void printMaxes(int[] a){
        int currentSum = a[0];
        int maxContSum = a[0];
        int maxSum = (a[0] > 0) ? a[0] : 0;
        int maxNum = a[0];
        for(int i = 1; i < a.length; i++){
            if(a[i] > 0){
                maxSum += a[i];
            } 
            if(a[i] > maxNum){
                maxNum = a[i];
            }
            currentSum = Math.max(currentSum + a[i], a[i]);
            maxContSum = Math.max(maxContSum, currentSum);
        }
        if(maxSum == 0){
            maxSum = maxNum;
        }
        System.out.println(maxContSum + " " + maxSum);
    }
}


Questions? Have a neat solution? Comment below!