c++ - 如何使用二进制搜索打印排序数组中的所有重复字符串?
问题描述
只是使用二分搜索,如何获得具有重复项的请求元素,因为重复项将一个接一个,搜索的条件应该是什么?
假设这是给定的数组,由用户输入,我们必须搜索“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
计算编号。的实例。
推荐阅读
- python - 将大熊猫数据框输入 TensorFlow
- python - 从mysql检索泰米尔语字符时出现问题
- javascript - React 将项目从一个对象复制到另一个对象,并查看对象是否以当前状态存在
- javascript - 查找给定位置最近的餐厅
- amazon-cloudformation - 模板验证错误:模板错误:Fn::If 中未解决的条件依赖 BackupSize
- c - 将一行多维数组作为参数传递
- r - 如何在栅格处理中保留栅格数据类型?
- php - 通过传递电子表格 ID 和工作表 ID 获取 googlesheet 数据
- java - 如何从firestore数据库中获取所有文档ID并将其存储到数组适配器
- python-3.x - 如何在python中将键添加到列表并转换为json