如何在首次出现最大值的排序数组中查找索引
How to find index in sorted array where occurs maximum value for the first time
如何在第一次出现最大值的排序数组中找到索引?
让我们以这个数组为例:
1 2 3 4 5 6 7 8 9 ... 200 201 201 201 201 201 201 201 201 201 201 201 201 ...201
其中CCD_ 1是最大值。
假设201
在这个数组中出现了200次。所以答案是指数等于200。
本机的解决方案是,只要我们得到!=201
,就对其进行迭代。但我想,找到更有效的解决方案是可能的。你建议用什么算法?
二进制搜索是O(log n)
,它比复杂度为O(n)
的天真方法要好。在c++中,您可以使用std::lower_bound
。
使用二进制搜索。
本机二进制搜索将返回任何一个出现的密钥。其"查找"标准是:
if(a[mid]==key)
return mid;
制作一个二进制搜索函数,其中您的"查找"标准是:
if(a[mid]==key && a[mid-1]<key)
return mid;
此外,如果它是一个简单的数组,则可以使用c++标准模板库(STL)函数lower_bound
。
您可以使用标头<algorithm>
中声明的标准算法std::lower_bound
例如
#include <algorithm>
#include <iterator>
//...
size_t n = std::distance( std::begin( a ),
std::lower_bound( std::begin( a ),
std::end( a ),
*std::prev( std::end( a ) ) ) );
其中CCD_ 10是已排序数组的名称。
从数组的末尾开始迭代,而不是从数组的开头开始。最大值的第一次出现可能更接近于结束而不是开始。
for (int i = array.length; i >=0; i--) {
do stuff
}
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序