algorithm - 对数组中的重复元素进行二分查找

标签 algorithm binary-search

我想知道我们如何使用二进制搜索处理数组中的重复元素。例如,我有一个像 1 1 1 2 2 3 3 这样的数组。我有兴趣寻找 2 的最后一次出现。

根据之前看过的一个帖子,我们可以先用二分查找找到2,然后扫描相邻的元素。这大约需要 o(log(n)+k)。所以最坏的情况是当 k = n 时。然后它需要 O(n) 时间。有什么办法可以提高最坏时间的性能。谢谢。

最佳答案

2.5 进行二进制搜索.换句话说,如果您要搜索的值是 N , 那么你的代码应该对待 N就像它太小了,N+1就像它太大了。该算法的主要区别在于它不能幸运地提前终止(当它找到值时)。它必须一直运行到最后,当 highlow指标相等。届时,您查找的索引与最终 high/low 的差值不应超过 1。索引。

关于algorithm - 对数组中的重复元素进行二分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405524/

相关文章:

c++ - 将二维数组传递给函数时出错

arrays - 计算 k 个子数组的最大反转次数

c++ - 二进制搜索真的是在 0 时钟 CPU 时间内执行的吗?

algorithm - 动态规划的硬币找零算法

ios - 两个 View 层次结构之间的公共(public) subview

c# - 在 .NET/C# 上下文中,什么是二分搜索以及如何/为什么使用二分搜索?

java - 二进制搜索运行时的某些异常

c - 我正在尝试搜索文件计数。使用二分搜索遇到 ‘C’ 个保留字

c# - 如何创建一个 "global"不可变的 List<T> 列表,它可以被 binarySearched

c++ - Colstore 与 Rowstore 的内存算法