DEV Community

codechunker
codechunker

Posted on

Solution to Leetcode’s Maximum Subarray

This is an easy Leetcode problem 53. See below image for description:

problem description

ALGORITHM

1.Have a global variable currentSum;

2.Have a global variable max that will also be the return value;

3.Loop through the array, check if the current element (nums[i]) is greater than the current sum and current element put together (i.e currentSum + nums[i]);

4.if it is greater, reassign the currentSum variable to be the current element, nums[i];

5.if it is not, reassign the currentSum variable to be the summation of both the existing current sum and the current array element (currentSum = currentSum + nums[i])

6.finally, check if the currentSum is greater than the current maximum. if it is, reassign the current max to be equal to currentSum.

7.Then return max.

CODE

public static int maxSubArray(int[] nums) {

    int currentSum = nums[0];
    int max = nums[0];

    for (int i = 1; i < nums.length; i++) {
        if (nums[i] > (currentSum + nums[i]))
            currentSum = nums[i];
        else
            currentSum = currentSum + nums[i];

        if (currentSum > max) {
            max = currentSum;
        }
    }
    return max;
}

OUTCOME
outcome image

IMPROVEMENT
Math.max checks the maximum/bigger value between two numbers. So we can replace those if statements with Math.max(). Cleaner code is shown below:

IMPROVED CODE

 public static int maxSubArray(int[] nums) {

        int currentSum = nums[0];
        int max = nums[0];

        for (int i = 1; i < nums.length; i++) {

            //cleaner and simple
            currentSum = Math.max(nums[i], currentSum + nums[i]);

            max = Math.max(currentSum, max);
        }
        return max;
    }

LESSONS
1.Don’t always be in the box of a particular algorithm you thought would work, just the way i thought Sliding window would work.

2.Using library functions where and when needed.

Thank you for reading. Please leave a comment.

Top comments (0)