在整数数组中查找最接近的数字

问题描述 投票:0回答:1

给定一个排序整数数组,我想找到最接近给定数字的值。数组可能包含重复值和负数。一个例子 :输入:arr [] = {-5,2,5,6,7,8,8,9};目标数量= 4输出:5

哪个是最快的算法?二进制搜索? STL找到算法?

感谢您的帮助。

c++ arrays closest
1个回答
3
投票

std库中有一种算法几乎可以完全满足您的要求:std::lower_bound

返回指向[[first,不小于(即大于或等于)值,或不大于如果找不到这样的元素。

您可以使用它来查找等于或高于目标的第一个元素。答案是前面的那个数字。


检查以下示例:

std::lower_bound

int find_closest(const vector<int>& A, int a) { if(A.size() <=0) throw std::invalid_argument("empty array"); 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; } 执行二进制搜索时,此方法的复杂度在输入集合的大小上是对数的。这比幼稚的解决方案要快得多,在幼稚的解决方案中,您将遍历整个集合并逐个检查每个元素。

© www.soinside.com 2019 - 2024. All rights reserved.