【问题标题】:What would be the binary search complexity to find second largest number in array在数组中找到第二大数字的二进制搜索复杂度是多少
【发布时间】:2019-10-15 14:37:10
【问题描述】:

谁能解释一下如何计算二分查找复杂度以找到数组中的第二大数。

【问题讨论】:

  • 数组是否允许包含重复项?
  • 是的,该数组允许包含重复项

标签: time-complexity binary-search


【解决方案1】:

二分查找是在一个有序数组上完成的。 如果您已经有一个排序数组,为什么还需要做任何事情呢?

数组中倒数第二个数字(按升序排序)将是第二大数字。(O(1))

如果数组包含重复项:

例如, {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,... }

时间复杂度为 O(log n),其中 n 是数组中元素的数量。

最小的数字是索引 0 处的数字(称为 x),现在您可以使用二分搜索查找所有元素都等于 x 的数组边界。这些边界之外的直接邻居将是数组中的第二大数字。

如果你使用C++,可以使用this方法获取upper_bound。

【讨论】:

    【解决方案2】:

    对具有任何给定属性的元素的二进制搜索始终是对数的,前提是您可以在恒定时间内确定该属性是否成立。

    如果数组不能包含重复项,则不需要二进制搜索,并且复杂度是恒定的。

    【讨论】:

      【解决方案3】:

      在python中有效地做到这一点的一种方法是几乎在O(1)时间内将list[允许重复]转换为set[不允许重复],然后在O中再次获取索引[-2]处的项目(1) 时间,假设因为是二分查找,列表会按升序排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-20
        相关资源
        最近更新 更多