Formatted question description: https://leetcode.ca/all/1749.html

1749. Maximum Absolute Sum of Any Subarray

Level

Medium

Description

You are given an integer array nums. The absolute sum of a subarray [nums_l, nums_{l+1}, ..., nums_{r-1}, nums_r] is abs(nums_l + nums_{l+1} + ... + nums_{r-1} + nums_r).

Return the maximum absolute sum of any (possibly empty) subarray of nums.

Note that abs(x) is defined as follows:

  • If x is a negative integer, then abs(x) = -x.
  • If x is a non-negative integer, then abs(x) = x.

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 <= 10^5
  • -10^4 <= nums[i] <= 10^4

Solution

Calculate the maximum subarray sum and the minimum subarray sum of nums. Then calculate the absolute values of the two sums, and return the maximum value.

class Solution {
    public int maxAbsoluteSum(int[] nums) {
        int sumMax = nums[0], sumMin = nums[0];
        int max = Math.max(sumMax, 0), min = Math.min(sumMin, 0);
        int length = nums.length;
        for (int i = 1; i < length; i++) {
            int num = nums[i];
            sumMax = Math.max(sumMax + num, num);
            sumMin = Math.min(sumMin + num, num);
            max = Math.max(max, sumMax);
            min = Math.min(min, sumMin);
        }
        return Math.max(Math.abs(max), Math.abs(min));
    }
}

All Problems

All Solutions