CodingInterview-连续子数组的最大和

思路比较简单,如果当前和大于最大和,就更新最大和,如果当前和小于 0,就重新开始。

首先,对于全正的数列,肯定是没问题的(最大和也就是所有的加起来),对于有正有负的数列也可以正常运行,因为一旦和小于 0,后面的数加上之前的和还不如它自己大,所以就抛弃之前的和,对于全负的数列,也是正确的,算法回找出最大的负数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.size()<1) return false;
int maxSum=array[0];
int nowSum=array[0];
for(int i=1;i<array.size();i++){
nowSum+=array[i];
if(nowSum>maxSum) maxSum=nowSum;
if(nowSum<0) nowSum=0;
}
return maxSum;
}
};