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