当我对MakeChocolate使用以下代码时,它会在大约50%的时间内通过所有测试,并且在最后4组中失败,大约50%的时间出现超时错误。任何人都可以解释为什么它似乎在某些时候工作但不是其他时间? (我在试验之间没有任何改变,我只需按下" Go"按钮,它有时可以工作,有时也不会。)
也许是连接错误或其他什么?如果有的话,你们其中一个人可以在浏览器上试一试,看看它是否具有可重复性?
public int makeChocolate(int small, int big, int goal) {
if ((goal - big*5) <= small && (goal %5) <= small) {
int counter = 0;
List<Integer> myList = new ArrayList();
while(counter - big <= 0) {
if ((goal - counter*5) >= 0) {
myList.add(goal - counter*5);
}
counter += 1;
}
return myList.get(myList.size() - 1);
}
else {
return -1;
}
}
答案 0 :(得分:1)
不,Java,CodingBat或网络速度都没有问题。这只是意味着您编写的代码完成了所有测试并及时完成了#39;什么时候这样做,而且“只是失败了”#39;如果没有这样做的话。为了确认我使用各种代码测试并发现最后四个测试失败了一些代码,因为代码根本不那么高效。例如我使用的第一个代码(一个非常简单的代码段): -
public int makeChocolate(int small, int big, int goal) {
int ans= -1;
for(int i = 1; i <= small; i++){
if(i + (big * 5) == goal){
ans = i;
}
}return ans;
}
显然这段代码没有通过所有测试,但由于其复杂性低,它能够通过最后四次测试。我使用的其他代码是: -
public int makeChocolate(int small, int big, int goal) {
int ans= -1;
for(int j = 1; j <= big; j++){
if(j * 5 < goal){
for(int i = 1; i <= small; i++){
if(i + (j * 5) == goal){
ans = i;
}}}
else if(j * 5 == goal){
ans = 0;}
else{ for(int i = 1; i <= small; i++){
if(i== goal){
ans = i;}}}}return ans;
}
此代码能够通过上述所有测试但无法传递编码所需的时间限制,最后四次测试。根据我不能及时通过的测试是价值超过千的那个。如果您在50%的时间内及时获得代码,则必须将代码更改为更高效。祝你好运。