原地址:http://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484
思路:分为两种情况,最大和非负和负。若当前最大和为负,那么令sum直接等于下一个值。
思路:
依次读入输入数组,进行累加,动态维护和的最大值。
设置两个变量,一个表示当前累加和
currentSum,另一个表示子数组和的最大值
greatestSum。由于currentSum为负数时继续累加的话,和只会变小,因此其为负数时,直接将下一个待读入的正整数进行替换。每次读入一个数后,将累加和跟greatestSum比较,来更新所求子数组和的最大值。
class
Solution {
public
:
bool
bInvalid =
false
;
int
FindGreatestSumOfSubArray(vector<
int
> array)
{
if
(array.empty())
{
bInvalid =
true
;
return
0;
}
int
currentSum = 0;
// 当前和
int
greatestSum = 0x80000000;
// 和的最大值,初始值取32位int的最小值
for
(
int
i=0;i<array.size();++i)
{
if
(currentSum < 0)
{
currentSum = array[i];
}
else
{
currentSum += array[i];
}
if
(currentSum > greatestSum)
{
greatestSum = currentSum;
// 更新和的最大值
}
}
return
greatestSum;
}
};