100个小问题_每日一题_第3题

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; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值