您的位置:首页 > 其它

31.连续子数组的最大和

2017-05-19 20:11 281 查看
输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

方法:动态规划

思路:在遍历到a[i]时,前面已求得的以a[i-1]结尾的最大和是sum[i-1]

如果a[i]>sum[i-1]+a[i],那么将sum[i]=sum[i-1]+a[i]

int FindGreatestSumOfSubArray(vector<int> array) {
int res=array[0];
int sum=array[0];
int n=array.size();

for(int i=1;i<n;i++){
if(sum>0) sum+=array[i];
else sum=array[i];   //如果遇到sum<=0,则放弃之前的求和

if(sum>res) res=sum;
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: