public int maxSubArray1(int[] nums) {
        int max_ending_here = nums[0], max_so_far = nums[0];
        for (int i = 1; i < nums.length; ++i) {
            max_ending_here = Math.max(nums[i], max_ending_here + nums[i]);
            max_so_far = Math.max(max_so_far, max_ending_here);
        }
        return max_so_far;
    }