例如。 -3,6,11,13,5,-11,4,7,8最大和= 30(6,11,13导致加-3会使总和变小)
例如。 7,0,-3最大总和= 7
例如4,-1,45最大总和= 45
例如-3 - , - 2,-6,0最大和= 0
需要为我的代码提供一些建议,仍然有错误
int maxSum = Integer.MIN_VALUE;
int sum = 0;
int checkNeg = Integer.MIN_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > checkNeg) {
checkNeg = a[i];
}
}
if (checkNeg <= 0) {
maxSum = checkNeg;
}
if (checkNeg > 0) {
for (int i = 0; i < a.length; i++) {
if (a[i] != 0) {
sum += a[i];
if (sum > maxSum) {
if (i != 0) {
if (a[i] >= a[i - 1]) {
maxSum = sum;
} else {
sum = a[i];
}
} else {
maxSum = sum;
}
}
if (sum < 0) {
sum = 0;
}
} else {
sum = 0;
}
}
}
return maxSum;
答案 0 :(得分:1)
试试这个
int maxSum = Int32.MinValue;
int sum = 0;
for (int i = 0; i < a.Length; i++)
{
if (a[i] >= 0)
{
sum += a[i];
maxSum = Math.Max(sum, maxSum);
if ((i+1<a.Length) && (a[i+1] < a[i]))
sum = 0;
}
else
{
maxSum = Math.Max(a[i], maxSum);
sum = 0;
}
}
return maxSum;
似乎适用于所有示例和其他几个示例。
不需要'checkNeg',这个检查应该更自然地来自算法