Maximum Absolute Sum of Any Subarray

Updated on 12 June, 2025
Maximum Absolute Sum of Any Subarray header image

Problem Statement

In this problem, you are given an array of integers, nums. You need to find the maximum absolute sum of any subarray within nums. A subarray is a contiguous part of the original array, and its absolute sum is calculated by summing all its elements and then taking the absolute value of the result. This task includes finding subarrays where the sum might be derived from positive, negative, or a combination of integer values, thus making the absolute operation critical. You may also consider an empty subarray which has a sum of zero.

Examples

Example 1

Input:

nums = [1,-3,2,3,-4]

Output:

5

Explanation:

The subarray [2,3] has absolute sum = abs(2+3) = abs(5) = 5.

Example 2

Input:

nums = [2,-5,1,-4,3,-2]

Output:

8

Explanation:

The subarray [-5,1,-4] has absolute sum = abs(-5+1-4) = abs(-8) = 8.

Constraints

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

Approach and Intuition

Understanding how to approach this problem involves recognizing the optimal subarray that maximizes the absolute sum. Let's dissect our approach based on the given examples and constraints:

  1. Identifying Critical Subarrays:

    • To maximize the absolute sum, we need to consider both positive and negative numbers due to the absolute operation. Essentially, we need to find out the subarray with the maximum sum (max_subarray_sum) and the subarray with the minimum sum (min_subarray_sum) because the absolute value of a negative large sum can also yield a large positive result.
  2. Using Kadane's Algorithm:

    • Traditionally used to find the maximum sum of a subarray (let's denote this as max_subarray_sum), Kadane's algorithm can be tweaked to find the minimum sum of a subarray (min_subarray_sum) as well by inverting the signs of the array.
    • By iterating through the array while keeping track of the current subarray sum, and updating the maximum (or minimum) found so far, Kadane’s algorithm efficiently finds what we need in linear time.
  3. Final Calculation:

    • The maximum absolute sum of any subarray will be the maximum of the absolute values of max_subarray_sum and the absolute value of min_subarray_sum.
    • Special consideration is given to the case of an empty subarray which has an absolute sum of zero; however, in most practical input scenarios, non-empty subarrays will provide a larger absolute sum.

This approach efficiently explores all potential subarrays using linear time complexity, which is crucial given the potential size of nums (up to 100,000 elements). The use of Kadane's algorithm provides an optimal route to solving the problem while ensuring all possibilities (both max and min sums, and even the zero sum from an empty subarray) are considered.

Solutions

  • C++
  • Java
  • Python
cpp
class Solution {
public:
    int calculateMaxAbsoluteSum(vector<int>& arr) {
        int minSum = 0, maxSum = 0;
        int currentSum = 0;
        for (int num : arr) {
            currentSum += num;
            minSum = min(minSum, currentSum);
            maxSum = max(maxSum, currentSum);
        }
        return maxSum - minSum;
    }
};

This solution in C++ effectively calculates the maximum absolute sum of any subarray in a given integer array. The function calculateMaxAbsoluteSum receives a vector of integers and utilizes the Kadane's algorithm variant to find the maximum absolute sum. Here's a breakdown of the method:

  • Initialize variables minSum and maxSum to zero. These variables will keep track of the minimum and maximum cumulative sums encountered as the array is traversed, respectively.
  • A currentSum variable is used to store the running total of elements as the array is iterated through.
  • Iterate through each number in the array:
    • Add the current number to currentSum.
    • Update minSum with the smaller of minSum or currentSum.
    • Update maxSum with the larger of maxSum or currentSum.
  • After completing the iteration, the function returns the difference between maxSum and minSum, which represents the maximum absolute sum of any subarray within the provided array.

This approach ensures that you get the correct maximum absolute sum with optimal performance and minimal additional space usage.

java
class Solution {

    public int maximumAbsoluteSum(int[] data) {
        int lowestSum = 0, highestSum = 0;
        int cumulativeSum = 0;

        for (int num : data) {
            cumulativeSum += num;

            lowestSum = Math.min(lowestSum, cumulativeSum);
            highestSum = Math.max(highestSum, cumulativeSum);
        }

        return highestSum - lowestSum;
    }
}

The Java function maximumAbsoluteSum calculates the maximum absolute sum of any subarray from a given array of integers. The function operates by maintaining a cumulative sum of values iterated through the array, using this running total to determine the minimum and maximum sums encountered.

Here's a concise breakdown of the algorithm:

  • Initialize lowestSum and highestSum to 0. These variables track the smallest and largest values of the cumulative sum respectively as the array is processed.
  • Initialize cumulativeSum to 0 to begin summing array elements.
  • Iterate over each element in the array data:
    • Add the current element to cumulativeSum.
    • Update lowestSum to be the smaller of lowestSum or cumulativeSum.
    • Update highestSum to be the larger of highestSum or cumulativeSum.
  • After completing the iteration over the array, compute the difference between highestSum and lowestSum, which gives the maximum absolute sum of any subarray.

This difference is then returned as the result, representing the maximum possible absolute sum of the subarray differences within the array. The approach efficiently calculates this value in a single pass through the array, ensuring optimal performance.

python
class Solution:
    def maximumAbsoluteSum(self, values):
        smallest_prefix = 0
        largest_prefix = 0
        cumulative_sum = 0

        for value in values:
            cumulative_sum += value

            smallest_prefix = min(smallest_prefix, cumulative_sum)
            largest_prefix = max(largest_prefix, cumulative_sum)

        return largest_prefix - smallest_prefix

This Python function solves the problem of finding the maximum absolute sum of any subarray by keeping track of the smallest and largest prefix sums encountered during a single iteration over the values list. The solution method is efficient, employing a running cumulative sum to update the smallest and largest encountered prefix sums.

  • Calculate the cumulative sum of elements in the input array while iterating.
  • Track the smallest and largest cumulative sum observed up to each point in the array.
  • Subtract the smallest prefix sum from the largest prefix sum to derive the maximum absolute sum of any subarray.

The output returns this difference, which represents the solution. This implementation provides an optimal approach given its linear time complexity, O(n), where n is the number of elements in the input array.

Comments

No comments yet.