题意:
给你一个整数数组 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.length <= 105
-104 <= nums[i] <= 104
解法:
对abs分类讨论,显然有正数和负数两种情况.
那么先计算一次最大字段和,再计算一次最小字段和即可.
code:
class Solution {
public:
static const int maxm=1e5+5;
int d[maxm];
int maxAbsoluteSum(vector<int>& a) {
int ans=0;
int sum=0;
for(auto i:a){
if(sum+i>i){
sum+=i;
}else{
sum=i;
}
ans=max(ans,sum);
}
sum=0;
for(auto i:a){
if(sum+i<i){
sum+=i;
}else{
sum=i;
}
ans=max(ans,-sum);
}
return ans;
}
};