思路比较简单,如果当前和大于最大和,就更新最大和,如果当前和小于 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; } };
|