给一个数组,求他的子串,使该子串的和最大

来源:互联网 发布:js调用java代码 编辑:程序博客网 时间:2024/05/01 16:27

如果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;

}

}

}

0 0
原创粉丝点击