给定一个排序的std::vector<int>,我想使用C++ 11-STD函数查找元素从负到正转变的索引。

我知道我可以使用二进制搜索来实现此功能,但我对标准库中是否有任何函数(类似于一元find_if)感兴趣,这将有助于此搜索(可能与正确的lambda表达式有关)。

最佳答案

您应该找到0的lower_bound:

auto iter = std::lower_bound(vec.begin(), vec.end(), 0);

生成的迭代器将指向最早的位置,您可以在其中插入0而不会破坏元素的顺序。同样,upper_bound将返回最右边的此类迭代器。

该算法的运行时间为O(logN)

关于c++ - 给定排序的 vector ,查找从负到正的转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39127708/

10-11 16:25