但是当我用相同的代码重复挑战并进行案例测试时,它给了我正确答案
您的测试用例[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;
}
}
}
我不知道它有什么问题?
答案 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);
}