1、基本求法,列举出所有可能组合,找到最大组合
<pre name="code" class="cpp">static int MaxSubSum(const int[] A,int N)
{
int MaxSum = 0 ;
for (int i = 0 ; i < N ; i ++)
{
for (int j = 0 ; j< N ; j++)
{
int tempSum = 0 ;
for (int k = i; k <= j ; k++)
{
tempSum += A[k];
}
if(tempSum > MaxSum)
{
MaxSum = tempSum;
}
}
}
return MaxSum;
}
2、在1的基础上,减少一层for循环
<pre name="code" class="cpp">
static int MaxSum(const int[] A,int N)
{
int MaxSum = 0 ;
for (int i = 0 ; i < N ; i ++)
{
int tempSum = 0;
for (int j = i ; j < N; j++)
{
tempSum += A[j];
if (tempSum > MaxSum)
{
MaxSum = tempSum;
}
}
}
return MaxSum;
}
3、online algorithm方式实现
<pre name="code" class="cpp">static int MaxSum(const int[] A,int N)
{
int MaxSum = 0 ;
int tempSum = 0;
for (int i = 0 ; i < N ; i++)
{
tempSum += A[i];
if (tempSum > MaxSum)
{
MaxSum = tempSum;
}
else if(tempSum < 0)
{
tempSum = 0;
}
}
return MaxSum;
}
4、递归方式如何实现?