【发布时间】:2017-01-01 03:12:51
【问题描述】:
我有以下问题需要解决:
给定 N 个整数组成集合 S 和另一个整数 A(不一定与给定的 N 个整数中的任何一个相同),从集合 S 中找到最接近整数 A 的整数。
我最初认为这是一个 NNS(最近邻搜索)问题,但在 NNS 中,整数 A 也必须来自集合 S,而在我的情况下它不必是。
然后我想到将 S 中的每个整数放入二叉搜索树中,并搜索其中一个子项小于查询且父项大于查询的第一次出现,但我不知道这是否可行。
我应该使用哪种数据结构?谢谢。
编辑:忘了说我需要这个比 O(n) 更好,O(logn) 就足够了。因此我不能使用线性搜索。
【问题讨论】:
-
你的集合是否已排序?
-
如果只有一个
A,那么线性搜索有什么问题? -
@PulkitGoyal 是的,它已排序。顺便说一句,忘了提到我在 O(logn) 中需要这个。现在要编辑我的问题。
-
只是一个带二分查找的排序数组/列表?
-
对小于或等于 A 的数字进行二分搜索,只需将其与下一个最接近的数字进行比较即可。也可以处理极端情况。