π 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β
Time & Space Complexityβ
| Variant | Time | Space |
|---|---|---|
| Max subarray sum | O(n) | O(1) |
| Circular max subarray | O(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β
Related Topicsβ
- Prefix Sum β complementary single-pass technique
- Dynamic Programming β Kadane is a 1D DP solved greedily
- Sliding Window β for bounded subarray variants
β Back to Home Β· Β© sparshjaswal