递归地在向量中找到第k个最大数字

时间:2013-12-07 19:41:39

标签: recursion

我有一个未排序的向量,我想以递归方式返回此向量中的第k个最大数字。有办法做到这一点吗?

Ex:2 3 41 67 0 9

我想要返回第二大数字41。 谢谢!

2 个答案:

答案 0 :(得分:0)

好吧,

在矢量中搜索最高数字,将其从矢量中删除,重复 k 次。

在伪代码中:

function findKthHighestNumber(vetor, k):
  i := findIndexOfHighestNumber(vector)
  if k = 1:
    return vector[i]
  else
    return findKthHighestNumber(concat(vector[0..i-1], vector[i+1..vector.length]), k-1)

当然,实际的实现取决于所使用的编程语言。此外,还应提供findIndexOfHighestNumber,但这是一项不同的任务......

答案 1 :(得分:0)

你使用像

这样的帮手
(define (nth-max vec nth cur-idx cur-max  lower-than)
   ...)

或与命名let相同。其中的逻辑应该是:

  1. 如果cur-idx与vector-length相同  A. nth大于1:重复低于cur-max并将nth减少1并将cur-idx设置为0。  B. Else cur-max就是解决方案。
  2. 如果cur-max高于cur-max且低于低于
  3. ,则将cur-idx作为cur-max重复

    你可以从低于+ Inf.0和cur-max开始作为第一个元素-Inf.0。如果结果是-Inf.0则没有解决方案..例如。在#(5 5 5 5)中找到第二大