/********************************************************************
*最大字段和算法 O(n)
*功能: 求解给定数组的最大字段和,并求出最大子段的起始位置和结束位置。
*函数: maxsum(int *num, int len, int *s,int *t)
*参数: num[] //原始数据
* len //数据长度
* s //最大子段的起始位置
* t //最大子段的结束位置
*返回值:
* sum //数组的最大字段和
*********************************************************************/
#define MIN -1000000;
int maxsum(int *num, int len, int *s, int *e)
{
inti, b = 0;
intstart = 1, end = 0;
intsum = MIN;
for( i = 1; i <= len; i++) {
if (b >= 0) {
b += num[i];
end++;
} else {
b = num[i];
start = i;
end = i;
}
if (b > sum) {
sum = b;
*s = start;
*e = end;
}
}
return sum;
}