如果f[m-1]>0, f[m]=f[m-1]+a[m]
f[m-1]<0, f[m]=a[m];
解释如下:
如果array[i,...k,....j]就是满足和最大的子串,那么对于任何k(i<k<j),必有array[i....k]和大于0,否则array[k+1,....j]和就大于array[i....j]
int kadane(const int array[],int length,int& left,int& right)
{
int i,cur_left,cur_right;
int max,cur_max;
max=cur_max=cur_left=cur_right=left=right=0;
for(int i=0;i<length;i++)
{
cur_max+=array[i];
if(cur_max>0)
{
cur_right=i;
if(max<cur_max)
{
max=cur_max;
left=cur_left;
right=cur_right;
}
}
else
{
cur_max=0;
cur_left=cur_right=i+1;
}
}
}