今天在牛客上做的一题,求连续子数组的最大值。
思路:
1)当当前和的值小于0,则丢弃,以下一个值作为新起点求和;
2)如果当前和的值大于记录的最大值,则更新最大值。
代码如下:
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.empty())
return 0;
int maxSumOfSubArray = std::numeric_limits<int>::min();//初始化为计算机整型最小值
int currentSum = 0;
int start=0;
int len = array.size();
while(start<len)
{
if(currentSum<=0)//和小于0则放弃前面记录的和,因为前面已经成为负担,不需要
currentSum = array[start];
else
currentSum += array[start];
if(currentSum > maxSumOfSubArray)
maxSumOfSubArray = currentSum;
++start;
}
return maxSumOfSubArray;
}