例如。 -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;
最佳答案
尝试这个
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',该检查应该更自然地从算法中得出
关于java - 非递减序列的最大和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9010284/