Java练习中的性能不佳
我正在用Java做一些测试来热身,我刚刚做了一个: 给出了一个由N个整数组成的非空零索引数组。 阵列A的连续元素表示阵列A上的连续车辆 路 阵列A仅包含0和/或1: 0表示向东行驶的汽车,1表示向西行驶的汽车。 目标是统计过往车辆。我们说一对汽车(P,Q), 其中0≤ PJava练习中的性能不佳,java,performance,Java,Performance,我正在用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),超出输入存储(不计算存储 输入参数是必需的)。输入数组的元素可以是 修改 我的代码如下:与结果的链接如下: 如果链接失效,结果显示: 性能测试 ▶ 中随机,长度=~10000✔好啊▶ 大随机, 长度=~100000✘错误答案得到预期的1248768710-1▶ 大的回答 0..01..1,长度=~100000✘回答错误-1794967296预期-1▶ 大号备用 0101..01,长度=~100000✘错误答案得到预期的1250025000-1▶ 大型\u所有1/0的极端大型测试,长度=~100000✔嗯 你知道我的代码有什么问题吗?你的规则是 函数应该返回−1如果通过车辆的对数超过100000000辆 你不需要测试这个条件。你可以用一个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; }
或者(有争议的)更具可读性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后,您不会停止。