簡體   English   中英

在 integer 數組中查找最接近的數字

[英]Find closest number in integer array

給定一個排序整數數組,我想找到最接近給定數字的值。 數組可能包含重復值和負數。 一個例子: Input:arr[] = {-5, 2, 5, 6, 7, 8, 8, 9}; 目標數 = 4 Output:5

最快的算法是什么? 二進制搜索? STL 找到算法?

謝謝你的幫助。

std庫中有一個算法幾乎完全符合您的要求: std::lower_bound

返回一個迭代器,該迭代器指向范圍 [first, last) 中不小於(即大於或等於)值的第一個元素,如果沒有找到這樣的元素,則返回 last。

您可以使用它來查找等於或高於目標的第一個元素。 答案是它前面的那個數字。


檢查以下示例:

int find_closest(const vector<int>& A, const int a)
{
    if(A.size() <=0)
        throw std::invalid_argument("empty array");

    const auto lb = std::lower_bound(A.begin(), A.end(), a);
    int ans = lb!= A.end() ? *lb : A.back();
    if (lb != A.begin()) {
        auto prec = lb - 1;
        if (abs(ans - a) > abs(*prec - a))
            ans = *prec;
    }

    return ans;
}

這種方法的復雜性與輸入集合的大小成對數,因為lower_bound執行二進制搜索。 這比一個簡單的解決方案要快得多,在這種解決方案中,您將遍歷整個集合並逐個檢查每個元素。

暫無
暫無

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

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