public int maxSubArray(int[] A) {
        if(A == null || A.length == 0) return 0;
        int max = A[0], sofar = (A[0] > 0) ? A[0] : 0;
        
        for(int i = 1; i < A.length; i++) {
            sofar += A[i];
            if(sofar > max) max = sofar;
            if(sofar < 0) sofar = 0;
        }
        
        return max;
    }