在数组中搜索复杂度高于 O(n) 的元素
Searching the element in array with complexity better than O(n)
我有任何数组,其中元素首先按递增顺序排列,然后按递减顺序排列
像 A[10]={1,4,6,8,3,2} ,数组中没有重复项。
如果输入为 7,则输出应为,元素不存在。
时间复杂度应该更好 thn O(n(
我通过线性搜索得到结果,将每个元素与找到的元素进行比较。但是由于我想要比O(n(更好的解决方案。
我尝试找到数组元素翻转的枢轴,然后从(0 到 pivot 元素(搜索,然后再次搜索(最后一个 elemnt 到 pivot elemnt(。
请指教。 对于 O(n(
#include<iostream>
int main()
{
int A[10]={1,4,6,8,3,2};
int i,num
cout<<"Enter the element to be searched";
cin>>num
for(i=0;i<10;i++)
{
If(A[i]==num)
{
cout<<"Element exist";
break;
}
else
cout<<"Element do not exist";
}
}
算法:
- 通过执行二叉搜索在log(n(中找到最大值并保存其索引。
- 在max的两侧进行二分搜索。
- 如果未找到并且元素不等于最大值,则它不存在。
如何做步骤1?
- 选择阵列的中间
- 对照左边的项目(你的邻居(检查它。如果更大,则最大值在右侧。否则,我们按递减顺序开始,max在左侧。选择在右侧/左侧搜索的方式取决于左侧的项目是更大还是更小。
编辑
以防万一不清楚:如果您选择第 n/2 个元素并发现 max 在左侧,那么您选择 n/4 个元素,如果最大值在其右侧,则只在元素n/4...n/2
范围内继续搜索。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 在数组中搜索复杂度高于 O(n) 的元素
- 查找容器中高于阈值的最大值和最小值元素