【问题标题】:Bad performance in Java exerciseJava 练习中的糟糕表现
【发布时间】:2015-09-25 23:29:19
【问题描述】:

我正在用 Java 做一些测试来热身,我刚刚做了这个:

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

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

0 代表汽车向东行驶,1 代表汽车向西行驶。 目标是计算过往车辆。我们说一对汽车(P,Q), 其中 0 ≤ P

例如,考虑数组 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)。

写一个函数:

类解决方案 { 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),超出输入存储(不计算存储 需要输入参数)。输入数组的元素可以是 修改。

我的代码如下:

public int solution(int[] A) {
        // write your code in Java SE 8
        int result = 0;
        long mult = 0;

        for(int value : A){

            if(value == 0){
                mult ++;        
            }
            else {
                result += mult;
            }
        }

        return result;
    }

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

如果链接死了,结果说:

性能测试

▶ medium_random random, length = ~10,000 ✔OK ▶ large_random random, 长度 = ~100,000 ✘错误答案得到 1248768710 预期 -1 ▶ large_big_answer 0..01..1,长度 = ~100,000 ✘错误答案得到 -1794967296 预期 -1 ▶ large_alternate 0101..01, length = ~100,000 ✘WRONG ANSWER got 1250025000 expected -1 ▶ large_extreme large test with all 1s/0s, length = ~100,000 ✔OK

你知道我的代码有什么问题吗?

【问题讨论】:

  • 超过 1,000,000,000 后你不会停止。

标签: java performance


【解决方案1】:

你的规则说,

如果经过的汽车对数超过 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;

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 2020-09-28
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2014-11-18
    • 1970-01-01
    • 2020-03-31
    相关资源
    最近更新 更多