【发布时间】:2015-03-09 20:54:27
【问题描述】:
假设我有一个vector<int> myVec。让其中有n 元素。我知道这些元素是按顺序排列的(升序),而且它们是独一无二的。设 n = 10 和 myVec 为 {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}。我得到了l 和r 这样0<=l<=r<=n-1。现在我想在 subvector 中搜索一个元素 val,它由边界 l 和 r 这样定义,
- 如果找到
val,则返回val - 如果找不到
val,则返回(如果可能)子向量中的一个值,该值刚好小于val。 - 如果以上任何一项都不可能,则返回 false(或可能是 -1)。
在上述情况下,如果l = 3 和r = 5。子向量是 {8, 10, 12}。如果val = 8 返回8。如果val = 7 返回false(或-1)。如果val = 9 返回8。
我该如何实现。 我想要类似于二分搜索的顺序。另外,是否可以使用algorithm 头文件下的std::binary_search()。
【问题讨论】:
-
如果你想进行二分搜索,一个名为
binary_search的算法听起来很有希望。你为什么不试试呢? -
@ZanLynx 这不是简单的二进制搜索。还有其他条件。
-
我看不出其他条件有何不同。请解释一下。
-
@ZanLynx 看看当 val = 9 时会发生什么。它返回子向量中小于 9 即 8 的元素。
-
你绝对需要二分搜索吗?改用
std::lower_bound怎么样?
标签: c++ search vector binary-search