Java练习中表现不佳

时间:2015-09-25 23:29:19

标签: java performance

我正在用Java做一些测试以进行预热,我刚刚做了这个:

  

给出了由N个整数组成的非空零索引数组A.   阵列A的连续元素代表a上的连续汽车   路。

     

数组A仅包含0和/或1:

     

0表示向东行驶的汽车,1表示向西行驶的汽车。   目标是计算过往车辆。我们说一对车(P,Q),   其中0≤P< Q&lt;当P向东行驶时,N正在经过   正在往西走。

     

例如,考虑数组A:

     

A [0] = 0 A [1] = 1 A [2] = 0 A [3] = 1 A [4] = 1我们有五个   成对的过往车辆:(0,1),(0,3),(0,4),(2,3),(2,4)。

     

写一个函数:

     

class Solution {public int solution(int [] A); }

     

给定N个整数的非空零索引数组A,返回   过往车辆的数量。

     

如果过往车辆对的数量,该函数应返回-1   超过1,000,000,000。

     

例如,给定:

     

A [0] = 0 A [1] = 1 A [2] = 0 A [3] = 1 A [4] = 1函数   应该返回5,如上所述。

     

假设:

     

N是[1..100,000]范围内的整数;数组A的每个元素   是一个整数,可以具有以下值之一:0,1。   复杂度:

     

预期的最坏情况时间复杂度为O(N);预期的最坏情况空间   复杂度是O(1),超出了输入存储(不包括存储   输入参数需要)。输入数组的元素可以是   修改。

我的代码如下:

final

结果的链接是这样的: https://codility.com/demo/results/trainingFFF4BS-AZ3/

如果链接死亡,结果说:

  

性能测试

     

▶medium_random random,length =~10,000✔OK▶large_random random,   长度=~100,000✘WRONGANSWER得到1248768710预期-1▶   large_big_answer   0..01..1,长度= ~100,000BEWRONG ANSWER得到-1794967296预期-1▶large_alternate   0101..01,长度=~100,000✘WRONGANSWER得到1250025000预期-1▶large_extreme大型测试,所有1s / 0s,长度=~100,000√OK

我的代码中有什么问题?

1 个答案:

答案 0 :(得分:4)

你的规则说,

  

如果过往车辆的数量超过1,000,000,000,该功能应返回-1。

你没有测试那种情况。您可以使用ternary operation

之类的东西
return result > 1000000000 ? -1 : result;

或(辩论地)更具可读性

if (result > 1000000000) {
    return -1;
}
return result;

为了提高性能,您可以添加该测试,如

for (int value : A) {
    if (value == 0) {
        mult++;
    } else {
        result += mult;
        if (result > 1000000000) {
            return -1;
        }
    }
}
return result;