31.连续子数组的最大和

来源:互联网 发布:软件工程软件测量过程 编辑:程序博客网 时间:2024/06/05 08:59

输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为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;    }
原创粉丝点击