# 题目描述

给你一个整数数组 nums 。一个子数组 [numsl, numsl+1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl + numsl+1 + ... + numsr-1 + numsr)

请你找出 nums 中 和的绝对值 最大的任意子数组可能为空),并返回该 最大值 。

# 测试用例

用例1

  • 输入:nums = [1,-3,2,3,-4]
  • 输出:5
  • 解释:子数组 [2,3] 和的绝对值最大,为 abs(2+3) = abs(5) = 5

用例2

输入:nums = [2,-5,1,-4,3,-2] 输出:8 解释:子数组 [-5,1,-4] 和的绝对值最大,为 abs(-5+1-4) = abs(-8) = 8

# 思路

绝对值 —— 那就分成两个部分

  1. 最大子数组和
  2. 最小子数组和 —— 反过来不就是最大了么
  3. 两者求Max即可

# 代码实现

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxAbsoluteSum = function(nums) {
    let res = 0, fMax = 0, fMin = 0;

    for(const x of nums){
        fMax = Math.max(fMax, 0) + x;
        fMin = Math.min(fMin, 0) + x;
        res = Math.max(res, fMax, -fMin);
    }

    return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15