簡體   English   中英

Java練習中表現不佳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM