我想查找小于或等于给定数字的最后一个数字。由于整数向量非常大,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}
和从两个阵列的末尾开始搜索。
正如我们所看到的,一个小于或等于2的数字位于位置5(索引4),但它可能位于大于5的任何位置,所以我们仍然必须完全搜索第二个数组,因为我们的目标是找到最大索引处的元素。
我想问是否有任何stl函数在第二个数组中找到小于2的数字,以便我没有完全搜索第二个数组。
我可以使用std :: find在第二个数组中找到一个小于2的数字吗?
编辑:小于或等于2的数字位于位置5(索引4),但它可能位于大于5的任何位置,因此我们停止在第一个数组中的位置5,但继续搜索第二个数组。假设我们得到位置7(索引6)的元素1,因为7> 5,所以我们返回位置7并结束程序。这节省了我们完全搜索第一个数组。
如果向量没有排序没有chance.binary搜索可以用来这就需要矢量进行排序 –
你基本上是问:“我怎么能在阵列检查每一个项目没有阵列检查每个项目”。 – VTT
有像low_bound和upper_bound以及find_last_of的stl,但所有需要矢量进行排序 –