[英]Bad performance in Java exercise
我正在用Java進行一些測試以進行預熱,我只做了一個:
給出了由N個整數組成的非空零索引數組A. 陣列A的連續元素表示道路上的連續車輛。
數組A僅包含0和/或1:
0表示向東行駛的汽車,1表示向西行駛的汽車。 目標是計算過往車輛。 我們說當P向東行駛而Q向西行駛時,一對汽車(P,Q),其中0≤P<Q <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,000,000,000,則該函數應返回-1。
例如,給定:
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✘WWONGANSWER得到1248768710預期-1▶large_big_answer 0..01..1,length =~100,000✘WRONGANSWER得到-1794967296預期-1▶ large_alternate 0101..01,length = ~100,000WWONG ANSWER得到1250025000 -1▶large_extreme large test全部為1s / 0s,長度=~100,000√OK
任何想法我的代碼有什么問題?
你的規則說,
如果過往車輛的對數超過1,000,000,000,則該函數應返回-1。
而且你沒有測試那個條件。 你可以用三元運算等
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.