剑指offer:连续子数组的最大和

原地址:http://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484


思路:分为两种情况,最大和非负和负。若当前最大和为负,那么令sum直接等于下一个值。


思路依次读入输入数组,进行累加,动态维护和的最大值。
设置两个变量,一个表示当前累加和 currentSum,另一个表示子数组和的最大值 greatestSum。由于currentSum为负数时继续累加的话,和只会变小,因此其为负数时,直接将下一个待读入的正整数进行替换。每次读入一个数后,将累加和跟greatestSum比较,来更新所求子数组和的最大值。
class Solution {
public :
     bool bInvalid =  false ;
     int FindGreatestSumOfSubArray(vector< int > array)
     {
         if (array.empty())
         {
             bInvalid =  true ;
             return 0;
         }
         
         int currentSum = 0;  // 当前和
         int greatestSum = 0x80000000;  // 和的最大值,初始值取32位int的最小值
         
         for ( int i=0;i<array.size();++i)
         {
             if (currentSum < 0)
             {
                 currentSum = array[i];
             }
             else
             {
                 currentSum += array[i];
             }
             
             if (currentSum > greatestSum)
             {
                 greatestSum = currentSum;  // 更新和的最大值
             }
         }
         
         return greatestSum;
     }
};

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值