有一个给定的元素说 N。如何修改二进制搜索以找到小于 N 的排序向量中的最大元素

There is a given element say N. How to modify Binary Search to find greatest element in a sorted vector which smaller than N

例如: 让我们有一个包含元素的排序向量:[1, 3, 4, 6, 7, 10, 11, 13] 我们有一个元素 N = 5

我希望输出为:

4

因为4是小于N的最大元素

我要修改二分查找得到答案

如果向量中有一个等于 N 的元素,您希望发生什么?

我会使用 std::lower_bound(或 std::upper_bound,具体取决于对上述问题的回答)。它以对数时间运行,这意味着它可能在后台使用二进制搜索。

std::optional<int> find_first_less_than(int n, std::vector<int> data) {
    // things must be sorted before processing
    std::sort(data.begin(), data.end());

    auto it = std::lower_bound(data.begin(), data.end(), n);

    // if all of the elements are above N, we'll return nullopt
    if (it == data.begin()) return std::nullopt;

    return *std::prev(it);
}