我有一个包含几个重复元素的数组,我想找到最接近数组末尾的重复元素的索引
I have an array of few repetitive elements, I want to find the index of the repetitive element which is closest to end of the array
我有一个包含几个重复元素的数组,我想找到最接近数组末尾的重复元素的索引。
#include<iostream>
uisng namespace std;
int main()
{
int arr[15]={1,2,3,4,5,6,7,8,8,8,9,10,11,12,13}; // 8 is repeating 3 times
// lets find the index of element 8 which is closest from the end
int index;
for(int i=0;i<15;i++)
{
if(arr[i]==8)
{
index=i;break;
}
}
cout<<index;
return 0;
}
这很容易,但如果数组非常大,假设数组的大小是 10^6,那么它可能需要一些时间。有人告诉我,一种经济方法是使用二叉搜索!考虑到给定的重复元素,如果有多个元素来查找最接近末尾的重复元素的索引,我如何使用二叉搜索?
显然,二分搜索是要走的路。我建议看看std::upper_bound。参考资料中还提到了实现的示例:
template<class ForwardIt, class T>
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T& value)
{
ForwardIt it;
typename std::iterator_traits<ForwardIt>::difference_type count, step;
count = std::distance(first,last);
while (count > 0) {
it = first;
step = count / 2;
std::advance(it, step);
if (!(value < *it)) {
first = ++it;
count -= step + 1;
} else count = step;
}
return first;
}
来源也 cppreference.com。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀