[LeetCode] 1749. Maximum Absolute Sum of Any Subarray
Problem
https://leetcode.com/problems/maximum-absolute-sum-of-any-subarray/description/
Leetcode - Maximum Absolute Sum of Any Subarray
Type - Prefix Sum, Greedy
Difficulty - Medium
Approach & Solution
Within the limit of prefix sum range [0, i],
If the answer is positive, we have to subtract maximum negative prefix if exists.
- It would be
maximum prefix sum - minimum prefix sum.
If the answer is negative, we have to subtract maximum positive prefix if exists.
- It would be
abs(minimum prefix sum - maximum prefix sum) = maximum prefix sum - minimum prefix sum.
So, the maximum subarray would be (maximum prefix sum - minimum prefix sum)
of range [0, i]
variables:
pref
: prefix sum of range [0, i] (0 <= i < n)maxSum
: maximum prefix sum within range [0, j] (0 <= j <= i)minSum
: minimum prefix sum within range [0, k] (0 <= k <= i)
While iterating array,
update prefix sum(pref += nums[i])
update maximum prefix sum
update minimum prefix sum
Finally, return maxSum - minSum
.
Complexity
Time Complexity: O(n) - Iterating through the array Once.
Space Complexity: O(1) - No extra data strtuctures are used.
Code (C++ | Go)
class Solution {
public:
int maxAbsoluteSum(vector<int>& nums) {
int maxSum = 0;
int minSum = 0;
int pref = 0;
for(int num : nums) {
pref += num;
maxSum = max(maxSum, pref);
minSum = min(minSum, pref);
}
return maxSum - minSum;
}
};
func maxAbsoluteSum(nums []int) int {
maxSum, minSum, pref := 0, 0, 0
for _, num := range nums {
pref += num
maxSum = max(maxSum, pref);
minSum = min(minSum, pref);
}
return maxSum - minSum
}