簡體   English   中英

編碼MaxDistanceMonotonic,我的解決方案出了什么問題

[英]codility MaxDistanceMonotonic, what's wrong with my solution

題:

給出了一個由N個整數組成的非空零索引數組A。 單調對是一對整數(P,Q),使得0≤P≤Q <N且A [P]≤A [Q]。

目標是找到索引最遠的單調對。 更准確地說,我們應該使值Q-P最大化。僅找到距離就足夠了。

例如,考慮數組A這樣:

A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2

有11個單調對:(0,0),(0、2),(1、1),(1、2),(1、3),(1、4),(2、2),(3 ,3),(3、4),(4、4),(5、5)。 在(1,4)對中,最大距離是3。

編寫一個函數:

int解(向量&A);

在給定N個整數的非空零索引數組A的情況下,該函數返回任何單調對中的最大距離。

例如,給定:

A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2

如上所述,該函數應返回3。

假使,假設:

N是[1..300,000]范圍內的整數; 數組A的每個元素都是[-1,000,000,000..1,000,000,000]范圍內的整數。

復雜度:最壞情況下的預期時間復雜度為O(N); 預期的最壞情況下的空間復雜度是O(N),超出了輸入存儲(不計算輸入參數所需的存儲)。 輸入數組的元素可以修改。

這是我對MaxDistanceMonotonic的解決方案:

    int solution(vector<int> &A) {

    long int result;

    long int max = A.size() - 1;
    long int min = 0;

    while(A.at(max) < A.at(min)){
        max--;
        min++;
    }

    result = max - min;

    while(max < (long int)A.size()){
        while(min >= 0){
            if(A.at(max) >= A.at(min) && max - min > result){
                result = max - min;    
            }
        min--;
        }
    max++;
    }

    return result;
}

我的結果是這樣的,我上次測試的答案出了什么問題:

在此處輸入圖片說明

如果你有:

0  1 2  3  4  5
31 2 10 11 12 30

您的算法輸出3 ,但正確答案是4 = 5 - 1

發生這種情況的原因是,在內部while循環的第一個完整運行中, min為-1,因此對(1, 5)將永遠沒有機會被檢查,進入嵌套whiles時max4開始。

請注意,問題描述在使用O(1)同時期望O(n)額外的存儲空間。 我認為O(1)額外存儲空間和O(n)時間無法解決問題。

我建議您重新考慮您的方法。 如果你放棄了,有一個官方的解決方案在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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