24. Kadane's Algorithm
The problem can be found at the following link: Problem Link
β¨ LeetCode Problem of the Day (POTD) Started β¨
As promised, Iβve continued solving and uploading LeetCode Problem of the Day (POTD) solutions! π―
My latest solution is now live: 1975. Maximum Matrix Sum
Problem Description
Given an integer array arr[]
, you need to find and return the maximum sum possible from all the subarrays.
Examples:
Input:
arr[] = [2, 3, -8, 7, -1, 2, 3]
Output:
11
Explanation:
The subarray {7, -1, 2, 3}
has the largest sum, which is 11
.
Input:
arr[] = [-2, -4]
Output:
-2
Explanation:
The subarray {-2}
has the largest sum -2
.
Constraints:
1 β€ arr.size() β€ 10^5
-10^9 β€ arr[i] β€ 10^4
My Approach
Kadane's Algorithm:
The core idea is to iterate through the array and maintain two variables:
maxh
: the maximum sum of the subarray that ends at the current index.maxf
: the global maximum sum encountered so far.
For each element:
Update
maxh
to be either the current element alone (starting a new subarray) or the current element added to the sum of the previous subarray.Update
maxf
to store the larger value between the currentmaxf
andmaxh
.
The result is the global maximum sum of a subarray in the array.
Steps:
Initialize
maxh
to 0 andmaxf
to a very small value.Traverse the array to calculate the maximum sum of the subarrays.
Return
maxf
as the result, which will hold the largest sum of any subarray.
Time and Auxiliary Space Complexity
Expected Time Complexity: O(n), where
n
is the size of the array. The algorithm performs a single linear scan of the array.Expected Auxiliary Space Complexity: O(1), as we only use a constant amount of additional space.
Code (C)
#include <limits.h>
long long maxSubarraySum(int arr[], int n) {
long long maxh = 0, maxf = LLONG_MIN;
for (int i = 0; i < n; i++) {
maxh = (maxh + arr[i] > arr[i]) ? maxh + arr[i] : arr[i];
maxf = (maxf > maxh) ? maxf : maxh;
}
return maxf;
}
Code (Cpp)
class Solution {
public:
long long maxSubarraySum(vector<int>& arr) {
long long maxh = 0, maxf = LLONG_MIN;
for (auto num : arr) {
maxh = std::max(num + maxh, (long long)num);
maxf = std::max(maxf, maxh);
}
return maxf;
}
};
Code (Java)
class Solution {
public long maxSubarraySum(int[] arr) {
long maxh = 0, maxf = Long.MIN_VALUE;
for (int num : arr) {
maxh = Math.max(num, maxh + num);
maxf = Math.max(maxf, maxh);
}
return maxf;
}
}
Code (Python)
class Solution:
def maxSubArraySum(self, arr):
maxh = 0
maxf = float('-inf')
for num in arr:
maxh = max(num, maxh + num)
maxf = max(maxf, maxh)
return maxf
Contribution and Support
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated