我想找到最后一个小于或等于给定数字的数字。由于整数向量非常大,O(n)效率不高。
我将矢量分成两部分并进行并行搜索。
让我们通过一个例子来理解: -
vector <int> arr = {1, 8, 7, 1, 2, 9, 5, 7, 4 ,6};
我想找到一个小于或等于2的数字的最后出现,所以我把数组分成两个:
{1, 8, 7, 1, 2} and {9, 5, 7, 4, 6}
并从两个数组中的end开始搜索。
正如我们所看到的,一个小于或等于2的数字位于第5位(索引4),但它可能位于任何大于5的位置,所以我们仍然必须完全搜索第二个数组,因为我们的目标是找到最大指数的元素。
我想询问是否有任何stl函数在第二个数组中找到小于2的数字,这样我就不会完全搜索第二个数组。
我可以使用std :: find在第二个数组中找到小于2的数字吗?
编辑:小于或等于2的数字位于第5位(索引4),但它可能位于任何大于5的位置,因此我们在第一个数组中的第5位停止,但继续搜索第二个数组。假设我们从位置7(索引6)得到元素1,因为7> 5所以我们只返回位置7并且程序结束。这使我们无法完全搜索第一个数组。
答案 0 :(得分:0)
由于我们从向量开始,如果我们从头到尾搜索,我们必须检查每个元素。
但是,如果我们从头到尾搜索,我们可以在谓词满足后立即停止。这使得算法最坏情况为O(N),最佳情况为O(1)。
Num: Value Size Type Bind Vis Ndx Name
49: 00000000002052a0 8 OBJECT GLOBAL DEFAULT 27 stderr@GLIBC_2.2.5 (3)