您的位置:首页 > Web前端

剑指offer--连续子数组的最大和

2017-03-17 19:37 381 查看
贪心策略:累加数组的每个数字,同时用last保存上次的和。

当本次和小于0时,说明前面累加的数字再往后面加只会让后面的数字更小,因此舍弃前面这段和,将其赋为0;

当累加过程中,本次的和小于上一次的和,说明本次的和极有可能为最大值,保存下该值。

考虑整个数组都为负数的情况,连续子数组的最大和实际上就是最大的一个负数。

最后比较一下,last与mayResult,较大值为结果。

int FindGreatestSumOfSubArray(vector<int> array) {
int mayResult=array[0];
int sum=0;
int last=array[0];
int max=array[0];
bool isallminus=true;
for(int i=0;i<array.size();i++)
{
if(array[i]>0)
{
isallminus=false;
break;
}
if (array[i]>max) max=array[i];
}
if(isallminus) return max;
for(int i=0;i<array.size();i++)
{
sum+=array[i];
if (sum<0) sum=0;
if (sum<last && last>mayResult) mayResult=last;
last=sum;
}
if (last>mayResult) mayResult=last;
return mayResult;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: