# 题目描述
给你一个整数数组 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
# 思路
绝对值 —— 那就分成两个部分
- 最大子数组和
- 最小子数组和 —— 反过来不就是最大了么
- 两者求
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15