您有一個數組和一個目標。找出數組中兩個元素的區別。這種差異應該最接近目標。算法:找出陣列中兩個元素之間最接近的差異
(即,找到i, j
使得(array[i]- array[j]
)應該是最接近目標)
嘗試: 我使用order_map(C++哈希表)來存儲陣列中的每個元素。這將是O(n)。 然後,我將有序元素輸出到一個新的數組(這是排序增加的數字)。
接下來,我使用了兩個指針。
int mini = INT_MAX, a, b;
for (int i=0, j = ordered_array.size() -1 ; i <j;) {
int tmp = ordered_array[i] - ordered_array[j];
if (abs(tmp - target) < mini) {
mini = abs(tmp - target);
a = i;
b = j;
}
if (tmp == target) return {i,j};
else if (tmp > target) j --;
else i ++;
}
return {a,b};
問:
是我的算法仍然在O(n)的運行?
兩個因素的差異,應該是最接近目標 – wrek
不管你做什麼,一般你需要的n log n至理清,除非你使用的算法類似基數排序這需要對輸入的範圍優勢,但我我不知道他們是O(n)算法 –
我想知道是否有O(n)算法來解決這個問題? – wrek