标签:
最近刚开始看算法,这里记录一下
求一个数列的子列相加最大的和(如果数列全为负数,则最大为0)
1 int getMaxSubSum(vector<int> &nums){ 2 int maxSum = 0,thisSum = 0; 3 for(int i= 0;i<nums.size();++i){ 4 thisSum+=nums[i]; 5 if(thisSum>maxSum){ 6 maxSum = thisSum; 7 }else if(thisSum<0){ 8 thisSum = 0; 9 } 10 } 11 return maxSum; 12 }
它的原理如下:
1、如果nums[i]为负,那么它不能为最大子列的起点
2、任何和为负的子序列不可能为最大子列的起点
通过maxSum记录最大和,当发现一段子列的和(thisSum)为负时重新开始求和。
标签:
原文地址:http://www.cnblogs.com/mmmmar/p/5474769.html