【问题标题】:How to find the largest, 2nd, 4th, 8th...2^logn th largest element in an array, use O(n) algorithm [closed]如何在数组中找到最大的、第 2、第 4、第 8 ......第 2^logn 个最大元素,使用 O(n) 算法 [关闭]
【发布时间】:2014-09-30 20:08:23
【问题描述】:

是否有 O(n) 时间的算法来查找数组中最大、第二大、第四大、...、第 2k 个等元素?

【问题讨论】:

  • 这看起来很像一个家庭作业问题,没有额外解释你是如何被困或你尝试了什么。
  • 请指定输入数组是否可以修改或复制(空间O(n)足够好)。

标签: algorithm sorting selection big-o


【解决方案1】:

由于这看起来像是一个家庭作业问题,我不会给出完整的答案。不过,这里有一些有用的提示:

  1. 你知道如何在 O(n) 时间内找到数组中第 k 个最大的元素吗?如果没有,您可能需要先查看一下,然后才能取得任何进展。
  2. 1 + 2 + 4 + 8 + ... + 2log n = 2n - 1,即 O(n)。
  3. 在智能选择的阵列上使用第 (1) 部分中的算法。 (2) 的总和将帮助您证明您拥有所需的运行时限制。

希望这会有所帮助!

【讨论】:

  • 在 O(n) 时间内找到数组中第 k 个最大的元素可以通过使用 quickSelect 来完成,它给出了第 k 个最小的元素。但我不确定如何从这里开始。这是我很久以前在大学学习 c++ 之后的第一堂计算机科学课。。
  • @KKKKK As a hint, try using that algorithm as a subroutine on appropriately-chosen arrays.
猜你喜欢
  • 2012-04-10
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 2016-11-09
  • 1970-01-01
相关资源
最近更新 更多