/********************************************************************
*一维的最大字段和算法 O(n)
*功能: 求解给定数组的最大字段和,并求出最大子段的起始位置和结束位置。
*函数: intmaxsum(int *num, int len, int &s, int &e)
*参数: num[] //原始数据从0开始存储
* len //数据长度
* s //最大子段的起始位置 注意: 1是第一个位置不是0;
* t //最大子段的结束位置
*返回值:
* sum //数组的最大字段和
*********************************************************************/
#define MIN-1000000;
int maxsum(int *num,int len, int &s, int &e)
{
int i, b = 0;
int start = 1, end = 0;
int sum = 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;
}