Article start
DSA Course: Interview Patterns and Problem Solving
Module 1: Arrays

Maximum Subarray: Kadane Pattern

Use Kadane's algorithm to keep the best subarray ending here and the best answer so far.

May 28, 2026·41

Learning Outcome

After this lesson, you should be able to explain why a negative running sum should be dropped and how Kadane's algorithm finds the best contiguous subarray.

Problem Statement

Given an integer array nums, return the largest possible sum of a non-empty contiguous subarray.

InputOutputWhy
[-2, 1, -3, 4, -1, 2, 1, -5, 4]6The subarray [4, -1, 2, 1] has sum 6.

Brute Force Approach

Try every start index and extend to every end index while tracking the largest sum.

This is useful for understanding the problem, but it still checks too many ranges and costs O(n^2).

Optimized Approach

At each index, decide whether to extend the previous subarray or start fresh from the current number. If the previous running sum hurts the answer, drop it.

Keep two values: current, the best subarray sum ending at this index, and best, the best sum seen anywhere.

Exact Pseudocode

current = nums[0]
best = nums[0]
for i from 1 to length(nums) - 1:
  current = max(nums[i], current + nums[i])
  best = max(best, current)
return best

Reference Code

class Solution:
    def maxSubArray(self, nums):
        current = nums[0]
        best = nums[0]

        for value in nums[1:]:
            current = max(value, current + value)
            best = max(best, current)

        return best

Sample Dry Run

valuecurrent decisioncurrentbest
-2start-2-2
1start at 111
-3extend: 1 + -3-21
4start at 444
-1extend34
2extend55
1extend66

Complexity

MeasureValueReason
TimeO(n)Each number is processed once.
SpaceO(1)Only running totals are stored.

Edge Cases

  • All numbers are negative. Return the largest single number.
  • Only one element.
  • Best subarray appears at the beginning or end.

Interview Checklist

  • Do not reset to zero if the problem requires a non-empty subarray.
  • Explain current as "best sum ending here".
  • Keep updating best after each current value.

FAQs

Why initialize with nums[0]?

The answer must be a non-empty subarray, so all-negative arrays should still return one element.

What is the key Kadane decision?

At every index, choose between starting fresh and extending the previous subarray.

Does this return the subarray itself?

This version returns only the sum. Track start and end indices if the platform asks for the actual subarray.

Test your knowledge

Take a quick quiz based on this chapter.

mediumDSA Course
Maximum Subarray - Kadane Pattern Practice Quiz
5 questions8 min

Discussion

0 comments

Sign in to share a question or add to the discussion.
Start the discussion

Ask a question or share what stood out to you.