使用Java的Codility中的PassingCars问题

时间:2018-11-13 10:05:16

标签: java performance

我正在做编译任务。我目前正在过车任务-https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/;

其中一项性能测试,我得到了“错误的答案,预期得到的-1794967296 -1”

(性能测试名称为“ large_big_answer 0..01..1,长度=〜100,000“)

其他测试都做得很好

我想知道如何纠正此错误

这是我的代码

class Solution {
    public int solution(int[] A) {
        int mul = 0;
        int cnt = 0;
        for(int i = 0 ; i<A.length ; i++){
            if(A[i] == 0) mul++;
            else cnt = cnt+mul;
        }
        if(cnt>1000000000) return -1;
        return cnt;
    }
}

1 个答案:

答案 0 :(得分:2)

正如@Nicholas K指出的那样,该问题确实与溢出有关。

<StackPanel> <TextBox /> <TextBox /> <TextBox /> <local:SetTextService.Text> <Binding Path="MyText" /> </local:SetTextService.Text> </StackPanel> 的支票移到for循环中。要求是:

  

如果传递的对数,则函数应返回-1   汽车超过1,000,000,000。

这样,一旦对数超过计数,就停止。

所以

if (cnt > 1_000_000_000)

以下是显示失败的测试案例:

public int solution(int[] A) {
    int mul = 0;
    int cnt = 0;
    for(int i = 0 ; i<A.length ; i++){
        if(A[i] == 0) mul++;
        else cnt = cnt+mul;

        if(cnt>1000000000) return -1;
    }

    return cnt;
}

更改支票的位置将使此测试通过。