我正在用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
我的代码中有什么问题?
答案 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;