仅仅使用二进制搜索,如何获得带有重复项的请求元素,因为重复项将是一个接一个的,搜索的条件是什么?
可以说这是由用户输入的给定数组,我们必须搜索“efg”是否存在,我们不知道索引,也不重复重复多少次,但是如果存在,则打印重复次数。
array[][10]={"abc","efg","efg","jkl","jkl","jhk"}
最佳答案
您可以使用upper_bound
查找比"efg"
大的第一个元素,然后使用lower_bound
查找"efg"
的第一个实例。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<string> V{ "abc", "efg", "efg", "jkl", "jkl", "jhk" };
cout << upper_bound(V.cbegin(), V.cend(), "efg") - lower_bound(V.cbegin(), V.cend(), "efg") << endl;
}
编辑:要对此进行改进,您可以首先使用lower_bound
来检查字符串是否存在于数组中。如果是这样,则使用upper_bound
计算no。实例。关于c++ - 如何使用二进制搜索将所有重复的字符串打印在排序数组中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63055622/