思路:时间复杂度O(n),空间复杂度O(1)
1.首先定义一个和的最小值
2.遍历开始累加 一开始是最小值 ,所以 sum += A[0];sum > max; max 就为A[0]; 判断如果sum 是小于0,重置sum = 0, (累加的初始值还应从0 开始),因为我们把值存在了max中,所以sum 重置为0 不影响max的变化,所以每次比较 sum 和 max 就好
3.这种解法 还有利于求解 产生最大值的区间位置
4.区间位置:就是最后一次更新 sum = 0时,和最后一次max 更新时的位置 即可
int getMaxSum(vector<int> A, int n) {
// write code here
int sum = 0;
int max = -(1 << 30);
for(int i=0;i<n;i++)
{
sum += A[i];
if(sum > max)
{
max = sum;
}
if(sum < 0)
{
sum = 0;
}
}
return max;
}