题目:
一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
解题思路:
方案一:可以使用暴力求解的方式,直接用两层for循环来解决问题,是一个O(n^2)的算法
方案二:从头开始遍历数组,每遍历一个元素sum+=array[i],若此时sum<array[i],就说明从array[i]开始的子数组的和大于前面的子数组的和,所以令sum=array[i]. 还不能遗漏最大和的判断和更新。
代码实现:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.empty())
return 0;
int cursum = array[0];
int maxsum = cursum;
int size = array.size();
int i = 1;
for(; i < size; ++i)
{
cursum += array[i];
if(cursum < array[i])
cursum = array[i];
if(cursum > maxsum)
maxsum = cursum;
}
return maxsum;
}