【问题标题】:binary search with duplicate elements in the array数组中重复元素的二分查找
【发布时间】:2016-07-15 21:54:30
【问题描述】:

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

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

【问题讨论】:

    标签: algorithm binary-search


    【解决方案1】:

    2.5 进行二分搜索。换句话说,如果您要搜索的值是N,那么您的代码应该将N 视为太小,而将N+1 视为太大。该算法的主要区别在于它不能幸运并提前终止(当它找到值时)。当highlow 索引相等时,它必须一直运行到最后。此时,您所查找的索引与最终的high/low 索引之间的距离不应超过 1。

    【讨论】:

    • 谢谢,这对我来说很有意义
    【解决方案2】:

    最简单的方法是进行上限二进制搜索。这与您提到的二进制搜索完全相同,只是不是尝试查找数字的第一个实例,而是首先查找大于提供的数字的第一个实例。它们之间的区别只不过是将< 切换为<=

    一旦找到大于您的数字的第一个实例,后退一个索引,然后查看那里的值。如果是2,那么你找到了最后的 2。如果是其他,那么数组中没有 2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-13
      • 2021-01-20
      • 1970-01-01
      • 2011-06-06
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多