problem3:
求最大连续子向量总和问题。
输入一个具有n个浮点数的向量x,输出是在输入的任何相邻的连续子向量中找出的最大的和,约定当所有的的输入都是负数时,最大子向量是空向量,向量的总和为0.
例如输入向量包含下面10个数:
31,-41,59,26,-53,58,97,-93,-23,84
那么程序的输出为x[2,3,4,5,6]的总和,即187.
以下是problem3解答,其实problem3是个经常见的问题,看大家的回帖感觉很多同学都看过programming pearls这么书嘛。
虽然problem3大家都会,但是为了保证完整,我这里还是写个具体点的解答出来,具体就不做解释了。
/*
* function : 求最大子向量
* 输入 : 一个浮点向量,和向量长度
* 输出 : 最大子向量总和
* 副作用 : 无
*/
double search_max_vector(double *array, int length){
double max_sofar = 0, max_ending_here = 0;
int i;
for(i = 0; i < length; ++i){
max_ending_here = max_ending_here + array[i] > 0 ? max_ending_here + array[i] : 0;
max_sofar = max_sofar > max_ending_here ? max_sofar : max_ending_here;
}
return max_sofar;
}