Algorithm 如何找到数组中最大的、第二、第四、第八……第2^logn个最大元素,请使用O(n)算法

Algorithm 如何找到数组中最大的、第二、第四、第八……第2^logn个最大元素,请使用O(n)算法,algorithm,sorting,selection,big-o,Algorithm,Sorting,Selection,Big O,是否有O(n)时间算法来查找数组中的最大、第二大、第四大、…、第二大等元素?由于这看起来像一个家庭作业问题,我不会给出完整答案。但是,以下是一些有用的提示: 你知道如何在时间O(n)内找到数组中第k个最大的元素吗?如果没有,在取得任何进展之前,您可能需要查找此信息 1+2+4+8+…+2logn=2n-1,也就是O(n) 在智能选择的阵列上使用第(1)部分中的算法。(2)中的总和将帮助您证明您具有所需的运行时界限 希望这有帮助 这看起来像是一个家庭作业问题,没有额外解释您是如何被卡住的或您尝试了

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

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

  • 你知道如何在时间O(n)内找到数组中第k个最大的元素吗?如果没有,在取得任何进展之前,您可能需要查找此信息
  • 1+2+4+8+…+2logn=2n-1,也就是O(n)
  • 在智能选择的阵列上使用第(1)部分中的算法。(2)中的总和将帮助您证明您具有所需的运行时界限

  • 希望这有帮助

    这看起来像是一个家庭作业问题,没有额外解释您是如何被卡住的或您尝试了什么。请指定是否可以修改或复制输入数组(空格O(n)足够好)。使用quickSelect可以在时间O(n)内找到数组中第k个最大的元素,它给出了第k个最小的元素。但我不知道如何从这里开始。这是我很久以前在C++中第一次上计算机科学课。……KKKK作为提示,尝试使用该算法作为适当选择的数组的子程序。