๐ 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