题目
向量中包含负数,例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和(子向量的长度至少是1)。
思路
- curSum = 0, maxSum = MAX_INT
- for number in array:
- if curSum < 0: // 如果curSum为负数,那么不管number是正还是负,curSum+number都不大于number。
- curSum = number
- else: // 如果curSum大于0,进行累加。
- curSum += number
- if curSum > maxSum: // 更新最大连续和
- maxSum = curSum
- if curSum < 0: // 如果curSum为负数,那么不管number是正还是负,curSum+number都不大于number。
- return maxSum
代码
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int curSum = 0;
int maxSum = INT_MIN;
for ( auto& num : array ) {
if ( curSum < 0 )
curSum = num;
else
curSum += num;
if ( curSum > maxSum )
maxSum = curSum;
}
return maxSum;
}
};