Java练习中的性能不佳

Java练习中的性能不佳,java,performance,Java,Performance,我正在用Java做一些测试来热身,我刚刚做了一个: 给出了一个由N个整数组成的非空零索引数组。 阵列A的连续元素表示阵列A上的连续车辆 路 阵列A仅包含0和/或1: 0表示向东行驶的汽车,1表示向西行驶的汽车。 目标是统计过往车辆。我们说一对汽车(P,Q), 其中0≤ P

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

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

阵列A仅包含0和/或1:

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

例如,考虑数组A这样:

我们有五个 两辆超车:(0,1),(0,3),(0,4),(2,3),(2,4)

编写一个函数:

类解决方案{public int Solution(int[]A);}

给定一个由N个整数组成的非空零索引数组,返回 过往车辆的对数

函数应该返回−1如果过往车辆的对数 超过100000000

例如,假设:

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

假设:

N是[1..100000]范围内的整数;数组的每个元素 是可以具有以下值之一的整数: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;
    }
与结果的链接如下:

如果链接失效,结果显示:

性能测试

▶ 中随机,长度=~10000✔好啊▶ 大随机, 长度=~100000✘错误答案得到预期的1248768710-1▶ 大的回答 0..01..1,长度=~100000✘回答错误-1794967296预期-1▶ 大号备用 0101..01,长度=~100000✘错误答案得到预期的1250025000-1▶ 大型\u所有1/0的极端大型测试,长度=~100000✔嗯

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

你的规则是

函数应该返回−1如果通过车辆的对数超过100000000辆

你不需要测试这个条件。你可以用一个

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;

超过100000000后,您不会停止。