还是动态规划方法的适应广些,数组可以全是负数。前面没用动态规划方法如何实现,还需进一步思考,明天继续。
/* FindGreatestSumofSubArray.cpp : 定义控制台应用程序的入口点。
@mishidemudong
@2015-5-22
*/
#include "stdafx.h"
int max(int x, int y)
{
return x > y ? x : y;
}
int FindGreatestSum(int *A, int length)
{
int CurentSum = A[0];
int StateSum = 0;
if (A == NULL || length <= 0)
return 0;
for (int i = 1; i < length; ++i)
{
if (CurentSum <= 0) //如果和都小于0了,就放弃前面的和,重新等于当前数,并从当前述开始计算和
CurentSum = A[i];
else
CurentSum += A[i];
if (CurentSum>StateSum) //记录最大的和,并保存在StateSum中;
StateSum = CurentSum;
}
return StateSum;
}
//动态规划的思路;
int MaxSum(int *A, int length)
{
int nStart = A[0];
int nAll = A[0];
for (int i = 1; i < length; ++i)
{
nStart = max(A[i], nStart + A[i]);
nAll = max(nStart, nAll);
}
return nAll;
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[] = { -1, -2, -1, -10, -4, -7, -9, -10, -2, -5 };
printf("%d\n", FindGreatestSum(A, 9));
printf("%d", MaxSum(A, 9));
return 0;
}