Gowthaman Ravi
Gowthy's Blog

Gowthy's Blog

Dynamic Programming | Maximum Subarray

Gowthaman Ravi's photo
Gowthaman Ravi
·Jan 26, 2022·

Subscribe to my newsletter and never miss my upcoming articles

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. A subarray is a contiguous part of an array.

Example 1: Input: nums = [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.

Example 2: Input: nums = [1] Output: 1

Example 3: Input: nums = [5,4,-1,7,8] Output: 23

Constraints: 1 <= nums.length <= 105 -104 <= nums[i] <= 104

Explanation:

Intution: Start traversing your array keep each element in the sum and every time keep the max of currSum and prevSum. But the catch here is that if at any point sum becomes negative then no point keeping it because 0 is obviously greater than negative, so just make your sum 0.

LEETCODE IMAGE.jpeg

Now here in this question you can see that you can also be asked some more things like :

  • Length of the max subarray
  • Elements of the max subarray
  • Start and End index of max subarray This is very important concept from interview point so try to get the ans of above mentioned point and have confidence on this algorithm.

C++ Solution

class Solution {
public:
    int maxSubArray(vector<int>& A) {
        int ans=A[0],i,j,sum=0;
        for(i=0;i<A.size();i++){
            sum+=A[i];
            ans=max(sum,ans);
            sum=max(sum,0);
        }
        return ans;
    }
};

Java Solution

class Solution {
    public int maxSubArray(int[] nums) {
        int n = nums.length;
        int max = Integer.MIN_VALUE, sum = 0;

        for(int i=0;i<n;i++){
            sum += nums[i];
            max = Math.max(sum,max);       
            if(sum<0) sum = 0;
        }   
        return max;
    }
}
 
Share this