Skip to content

Files

Latest commit

Jul 23, 2023
e1b8af0 · Jul 23, 2023

History

History

1749-Maximum Absolute Sum of Any Subarray

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
No commit message
Jul 23, 2023
No commit message
Jul 23, 2023
No commit message
Jul 23, 2023
No commit message
Jul 23, 2023

1749. Maximum Absolute Sum of Any Subarray

You are given an integer array nums. The absolute sum of a subarray [numsl, numsl+1, ..., numsr-1, numsr] is abs(numsl + numsl+1 + ... + numsr-1 + numsr).

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 <= 105
  • -104 <= nums[i] <= 104

Solutions (Ruby)

1. Prefix Sum

# @param {Integer[]} nums
# @return {Integer}
def max_absolute_sum(nums)
  sum = 0
  max_sum = 0
  min_sum = 0
  ret = 0

  nums.each do |x|
    sum += x
    max_sum = [max_sum, sum].max
    min_sum = [min_sum, sum].min
    ret = [ret, (sum - max_sum).abs, (sum - min_sum).abs].max
  end

  ret
end

Solutions (Rust)

1. Prefix Sum

impl Solution {
    pub fn max_absolute_sum(nums: Vec<i32>) -> i32 {
        let mut sum = 0;
        let mut max_sum = 0;
        let mut min_sum = 0;
        let mut ret = 0;

        for x in nums {
            sum += x;
            max_sum = max_sum.max(sum);
            min_sum = min_sum.min(sum);
            ret = ret.max((sum - max_sum).abs()).max((sum - min_sum).abs());
        }

        ret
    }
}