非递减序列的最大总和

时间:2012-01-25 21:04:44

标签: java arrays sequence

例如。 -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;

1 个答案:

答案 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',这个检查应该更自然地来自算法