码迷,mamicode.com
首页 > 其他好文 > 详细

最大子序列

时间:2015-05-14 20:30:41      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

问题:给定一个数组a[N],其中元素有正,也有负,找出其中一个连续子序列,使和最大

解决思路:使用动态规划,假设b[i]表示以a[i]结尾的 和最大 子序列,则有 b[i+1]=b[i]>0?b[i]+a[i+1]:a[i+1]

代码:

int maxSubArray(vector<int>& nums) {
int maxSumResult = -INT_MAX ;
int localSum= 0 ;
for(int i = 0 ; i < nums.size() ; i++){

  localSum = localSum + nums[i];

  localSum = nums[i] >= localSum ? nums[i] : localSum;

    //以上两行可以改写成一行:localSum=localSum>0?localSum+nums[i]:nums[i];
  //只要不出现新的头,就一直累加
  //新的头:当上一段最大和加上一些数成为负数时。
  if(localSum>maxSumResult){//累加的过程中,只要出现比当前累加和大的就替换最大值。
    maxSumResult = localSum;
  }

}
return maxSumResult;
}

最大子序列

标签:

原文地址:http://www.cnblogs.com/xiangzhi/p/4504238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!