二进制搜索排序向量中的对象,其中包含一些无意义的条目作为干扰
Binary Search an object in a sorted vector with some meaningless entries as interference
我有一个向量vector<int> A
,其中所有非零值都已被很好地排序。然而,也有一些0
存储在里面,我们认为它没有意义。矢量中不存在非零元素的重复项。例如,A
是类似于[0,0,5,0,6,9,10,21,0,40,0]
的某种向量。现在给定一个数字x (x!=0)
,我们应该找到这个向量中的第一个位置,使得这里的值>= x
。例如,如果是x == 10
,则返回值应该是6
,因为A[6] == 10
;如果是x == 23
,则返回值应该是9
,因为A[9] == 40
是第一个大于10
的元素。
考虑到无意义的0
,我知道如何编写自己的代码来实现二进制搜索。然而,我正在考虑如何使用STL现有的函数来实现它。一个直接的想法是将所有非零元素提取到另一个vector<int> B
,记录每个元素在A
中的原始位置,将std::lower_bound
应用到B
,最终得到A
中的位置。然而,由于提取步骤将具有复杂度O(N)
,因此这种想法虽然有效,但将毫无意义。
有人能帮我想出STL函数的另一个想法吗?复杂性需要不大于log(N)
。
注意:有些人说,如果向量A
包含全零,那么我们在log(N)
中没有办法做到这一点。请将其视为最坏的情况。我所说的log(N)
的意思是,如果A
不包含零,那么它应该是log(N)
;当然,随着零点数量的增加,效率肯定在降低,但这是必须的。
在O(logn)
中不能执行此操作。考虑向量中所有元素都为零的情况。你绝对找不到一种算法能在O(n)
时间内做到这一点。
相关文章:
- AddDllDirectory会干扰后续的LoadLibraryExW
- DropBox 会干扰 DeleteFile()/rename() 吗?
- 构造函数干扰成员变量指定的初始值设定项?
- C++ 无效双指针干扰另一个
- 通过 Ctypes 将 std:vector 从 C++ 传递到 Python:获取无意义的值
- 来自不同翻译单元的函数会干扰吗?
- 如何在忽略C++中的干扰词的同时解析用户输入?
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- 代码打印出一系列无意义的数字
- 自动收报机中断会干扰硬件中断吗?
- 在功能方面遇到了一些问题,以及它们如何干扰Main
- 干扰矢量在GlBegin()中
- 正确读取被ID3标签干扰的MP3文件
- GetAsyncKeyState() - 外部程序会干扰它
- 干扰GETLINE功能的东西
- QOpenGLWidget:以60FPS绘制,同时不干扰其现有时序
- 编译器在无意义函数中给出错误
- 如果二进制运算符+重载的返回值是const,它会干扰优化吗
- std::unique_ptr 干扰某些 sf::RenderWindow 函数
- 二进制搜索排序向量中的对象,其中包含一些无意义的条目作为干扰