可靠性挑战,测试用例OK,评估报告错误答案

时间:2014-06-08 22:07:09

标签: java

铝2014给了我错误的答案[3,9,6,7,-3,9,6,-10]得到25预期28

但是当我用相同的代码重复挑战并进行案例测试时,它给了我正确答案

您的测试用例[3,9,-6,7,-3,9,6,-10]:无运行时错误(返回值:28)

它有什么问题???

挑战: -

  

给出了由N个整数组成的非空零索引数组A.一个   整数对(P,Q),使得0≤P≤Q<1。 N,被称为切片   数组A.切片之和(P,Q)是A [P] + A [P + 1] +的总和...   + A [问]。最大总和是A的任何切片的最大总和。例如,考虑数组A使得:A [0] = 3       A [1] = 2       A [2] = -6       A [3] = 3       A [4] = 1例如(0,1)是A的切片,其具有和A [0] + A [1] = 5.这是A的最大总和。您可以执行单个交换   数组A中的操作。此操作采用两个索引I和J,例如   0≤I≤J<0 N,并交换A [I]和A [J]的值。目标   是找到执行单个后可以达到的最大金额   交换。例如,在交换元素2和4之后,您将获得   在数组A之后:A [0] = 3       A [1] = 2       A [2] = 1       A [3] = 3       A [4] = -6之后,(0,3)是A的切片,其具有和A [0] + A [1] + A [2] + A [3] = 9.这是最大值单次交换后的A总和。编写函数:class Solution {public int solution(int [] A);   给定N个整数的非空零索引数组A,返回   单次交换操作后A的任何切片的最大总和。对于   例如,给定:A [0] = 3       A [1] = 2       A [2] = -6       A [3] = 3       A [4] = 1该函数应返回9,如上所述。

我的代码是: -

import java.math.*;

class Solution {
    public int solution(int[] A) {
        if(A.length == 1) 
            return A[0];
        else if (A.length==2)
            return A[0]+A[1];

        else{
            int finalMaxSum = A[0];

            for (int l=0 ; l<A.length ; l++){
                for (int k = l+1 ; k<A.length ; k++ ){

                    int [] newA = A;
                    int temp = newA[l];
                    newA [l] = newA[k];
                    newA[k]=temp;

                    int maxSum = newA[0];
                    int current_max = newA[0];
                    for(int i = 1; i < newA.length; i++)
                    {
                        current_max = Math.max(A[i], current_max + newA[i]); 
                        maxSum = Math.max(maxSum, current_max);
                    }

                    finalMaxSum = Math.max(finalMaxSum , maxSum);

                }
            }

            return finalMaxSum;
        }
    }
}

我不知道它有什么问题?

2 个答案:

答案 0 :(得分:1)

这是网站上的一个错误,这是支持团队的回复

评估系统不仅在它呈现给你的测试用例上运行你的程序,而且在镜像测试用例B = [-10,-6,9,-3,7,-6,9,3]上运行你的程序。在测试用例B中,你的程序确实返回了22,当它应该返回28时。

答案 1 :(得分:-2)

public static int findMaxSumOfArray(int[] A) {
    int[] T = new int[A.length];
    int sum = 0;

    int max1 = Integer.MIN_VALUE;
    int max2 = Integer.MIN_VALUE;
    int max3 = Integer.MIN_VALUE;
    int max1index = 0;
    int max2intex = 0;

    for (int i = 0; i < A.length; i++) {
        if (A[i] < 0) {
            T[i] = sum;
            sum = 0;
        } else if (i == A.length - 1) {
            sum += A[i];
            T[i] = sum;
            sum = 0;
        } else {
            sum += A[i];
        }
    }

    for (int i = 0; i < T.length; i++) {
        if (max3 < T[i]) {
            if (max2 < T[i]) {
                if (max1 < T[i]) {
                    max2intex = max1index;
                    max3 = max2;
                    max2 = max1;
                    max1 = T[i];
                    max1index = i;
                } else {
                    max3 = max2;
                    max2 = T[i];
                    max2intex = i;
                }
            } else {
                max3 = T[i];
            }
        }
    }
    return max1 + max2 + (Math.abs(max1index - max2intex) == 1 ? max3 : 0);
}