题目:
输入一个整型数组,数组里面有正数和负数,数组中一个或连续的多个整数形成的一个子数组,求所有子数组的和的最大值。要求时间复杂度为o(n)。(子数组的长度至少为1)
解法:
1、动态规划做法。
2、先初始化到a[0]的子数组的最大和,依次求到a[1]的子数组的最大和
代码如下:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.size()==0 ||array.empty())
return 0; //因为长度最少为1 所以初始化为array[0] 若可以取0个 ,直接初始化0 从i=0开始
int totalMax=array[0];//上一个元素的最大叠加和
int curSum = array[0];// 历史上的最大叠加
for(int i =1;i<array.size();i++)
{
if(totalMax <= 0)
totalMax = array[i];
else
totalMax+=array[i];
curSum = curSum>totalMax?curSum:totalMax;
}
return curSum;
}