标签:
问题:给定一个数组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