Kadane's Algorithm
JavaView on GFG
Time: O(n)
Space: O(1)
Advertisement
Intuition
Maximum subarray sum. At each position, decide: extend the current subarray or start fresh. If the running sum becomes negative, starting fresh is always better. dp[i] = max(nums[i], dp[i-1]+nums[i]).
Algorithm
- 1maxSum = currentSum = arr[0].
- 2For i from 1 to n−1: currentSum = max(arr[i], currentSum+arr[i]).
- 3maxSum = max(maxSum, currentSum).
- 4Return maxSum.
Example Walkthrough
Input: arr = [-2,1,-3,4,-1,2,1,-5,4]
- 1.cur: -2→1→-2→4→3→5→6→1→5. maxSum=6.
Output: 6
Common Pitfalls
- •Initialize both maxSum and currentSum to arr[0] to handle all-negative arrays correctly.
Kadane's Algorithm.java
Java
// Approach: Dynamic programming. Track max_ending_here (reset to arr[i] if negative) and max_so_far.
// Time: O(n) Space: O(1)
class Solution {
// arr: input array
// Function to find the sum of contiguous subarray with maximum sum.
long maxSubarraySum(int[] arr) {
long ans = Integer.MIN_VALUE;
long c = 0;
for (int val : arr) {
c += val;
ans = Math.max(ans, c);
c = c < 0 ? 0 : c;
}
return ans;
}
}
Advertisement
Was this solution helpful?