Skip to main content

πŸ“ˆ Kadane's Algorithm

One-line summary: Find the maximum-sum contiguous subarray in O(n) by tracking the best sum ending at each position.


Concept​

At each index decide: extend the previous subarray, or start fresh?

maxEndHere = max(arr[i], maxEndHere + arr[i])
maxSoFar = max(maxSoFar, maxEndHere)

Diagram​

Kadane Flow Kadane Animation


Time & Space Complexity​

VariantTimeSpace
Max subarray sumO(n)O(1)
Circular max subarrayO(n)O(1)

Common Patterns​

Basic Kadane​

function maxSubarraySum(arr) {
let maxEndHere = arr[0],
maxSoFar = arr[0];
for (let i = 1; i < arr.length; i++) {
maxEndHere = Math.max(arr[i], maxEndHere + arr[i]);
maxSoFar = Math.max(maxSoFar, maxEndHere);
}
return maxSoFar;
}

Circular Variant​

function maxCircular(arr) {
const total = arr.reduce((s, x) => s + x, 0);
const maxLinear = kadane(arr);
const minLinear = kadane(arr.map((x) => -x));
const maxCircular = total + minLinear;
return maxCircular === 0 ? maxLinear : Math.max(maxLinear, maxCircular);
}

Pitfalls​

  • All-negative array: result is the largest single element, not 0
  • Circular variant: if all elements are negative the circular answer is 0 β€” guard against it

Practice Problems​

ProblemDifficultySolution
LC 53 β€” Maximum SubarrayMediumView Solution
LC 918 β€” Maximum Sum Circular SubarrayMedium
LC 152 β€” Maximum Product SubarrayMedium
LC 1749 β€” Maximum Absolute Sum of Any SubarrayMedium
LC 238 β€” Product of Array Except SelfMedium
CC β€” Maximum Subarray Sum (KCON)Medium
LC 643 β€” Maximum Average Subarray IEasy
LC 325 β€” Maximum Size Subarray Sum Equals kMedium
LC 1567 β€” Maximum Length of Subarray With Positive ProductMedium
LC 1856 β€” Maximum Subarray Min-ProductMedium
LC 1186 β€” Maximum Subarray Sum with One DeletionMedium
LC 121 β€” Best Time to Buy and Sell StockEasy
LC 122 β€” Best Time to Buy and Sell Stock IIMedium
LC 697 β€” Degree of an ArrayEasy
LC 978 β€” Longest Turbulent SubarrayMedium
LC 1004 β€” Max Consecutive Ones IIIMedium
LC 1191 β€” K-Concatenation Maximum SumMedium
LC 1395 β€” Count Number of TeamsMedium
LC 1524 β€” Number of Sub-arrays With Odd SumMedium
LC 1546 β€” Maximum Number of Non-Overlapping SubarraysMedium
CC β€” Chef and Subarrays (CHEFSUM)Medium
CC β€” Maximum Subarray (MAXSUM)Easy
CC β€” Subarray with Given Sum (SUBSUM)Medium

← Back to Home Β· Β© sparshjaswal