[英]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時max
從4
開始。
請注意,問題描述在使用O(1)
同時期望O(n)
額外的存儲空間。 我認為O(1)
額外存儲空間和O(n)
時間無法解決問題。
我建議您重新考慮您的方法。 如果你放棄了,有一個官方的解決方案在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.