Kadane's Algorithm


53. Maximum Subarray – LeetCode


Problem Statement

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


Examples

Example 1:

Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: The subarray [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
Explanation: The subarray [5,4,-1,7,8] has the largest sum = 23.

Constraints


Intuition

This is a classic problem of dynamic programming. The key idea is:

This is best solved using Kadane’s Algorithm in O(n) time.


Approach: Kadane’s Algorithm

  1. Initialize:

    • maxSum = nums[0]

    • currSum = nums[0]

  2. Loop through i = 1 to n - 1:

    • currSum = max(nums[i], currSum + nums[i])
      (either extend the subarray or start new from current)

    • maxSum = max(maxSum, currSum)

  3. Return maxSum


Java Code

class Solution {
    public int maxSubArray(int[] nums) {
        int currSum = nums[0];
        int maxSum = nums[0];

        for (int i = 1; i < nums.length; i++) {
            currSum = Math.max(nums[i], currSum + nums[i]);
            maxSum = Math.max(maxSum, currSum);
        }

        return maxSum;
    }
}

Time and Space Complexity

Metric Value
Time Complexity O(n)
Space Complexity O(1)

Dry Run

Input:

nums = [-2,1,-3,4,-1,2,1,-5,4]

Steps:

→ Return 6


Follow-up: Divide and Conquer Approach (Advanced)

Time: O(n log n)

Kadane’s Algorithm is preferred due to O(n) time.


Conclusion

The Maximum Subarray problem is a foundational problem for understanding prefix sums, dynamic programming, and divide-and-conquer strategies.

Kadane’s Algorithm provides an elegant and efficient solution by:

It’s widely applicable in many financial, data stream, and performance optimization scenarios.