- 任意子数组和的绝对值的最大值
给你一个整数数组 nums 。一个子数组 [numsl, numsl+1, …, numsr-1, numsr] 的 和的绝对值 为 abs(numsl + numsl+1 + … + numsr-1 + numsr) 。
请你找出 nums 中 和的绝对值 最大的任意子数组(可能为空),并返回该 最大值 。
abs(x) 定义如下:
如果 x 是负整数,那么 abs(x) = -x 。
如果 x 是非负整数,那么 abs(x) = x 。
示例 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 <= nums.length <= 105
-104 <= nums[i] <= 104
题解
计算前缀和,因为有负数,所以答案肯定是前缀和减去前面的某个最小和前缀或者最大和前缀。
AC代码
class Solution {
public:
int maxAbsoluteSum(vector<int>& nums)
{
int mi=0,mx=0,ans2=0;
int res=-1e9;
for(int i=0;i<nums.size();i++)
{
ans2+=nums[i];
res=max(res,abs(ans2-mi));
res=max(res,abs(ans2-mx));
mi=min(mi,ans2);
mx=max(mx,ans2);
}
return res;
}
};