可以考虑动态规划,如当前和小于等于0,则下一个数从新开始计算,保存当前的最大值。
int
FindGreatestSumOfSubArray(vector<
int
> array) {
if
(array.empty())
return
0;
int
sum = array[0], tempsum = array[0];
//注意初始值 不能设为0 防止只有负数
for
(
int
i = 1; i < array.size(); i++)
//从1开始 因为0的情况在初始化时完成了
{
tempsum = (tempsum < 0) ? array[i] : tempsum + array[i];
sum = (tempsum > sum) ? tempsum : sum;
}
return
sum;
}
还可
if(array.size()==0)
return 0;
int curSum=0;
int nMaxSum=0x80000000;
for(int i=0;i<array.size();i++){
if(curSum<=0)
curSum=array[i];
else{
curSum += array[i];
}
if(curSum>nMaxSum)
nMaxSum=curSum;
}
return nMaxSum;
}