2013-12-07 46 views
-2

我有一个未排序的向量,我想递归地返回此向量中第k个最大的数。有一种方法可以做到这一点?递归地查找向量中第k个最大的数

例:2 3 41 67 0 9

而且我想返回是41 由于第二大数目!

+1

欢迎来到stackoverflow.com。 请看看关于页面。你通常应该首先展示你自己的方法或解决方案(“展示你的工作”),并询问为什么它不起作用,而不是让社区解决你的问题。 –

回答

0

好,

搜索在向量数量最多,从载体中删除,重复ķ倍。

在伪代码:

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应当提供为好,但是这是一个不同的任务......

+0

这只是迭代,而不是递归。 –

+0

好吧,我可能会有点短。添加了伪代码来演示。这显示了它是如何递归的。 –

0

你使用一个辅助像

(define (nth-max vec nth cur-idx cur-max lower-than) 
    ...) 

或相同命名的让利。在它的逻辑应:

  1. 如果CUR-IDX是相同矢量长度 A.第n是大于1:与复发低于作为CUR-max和由1减少第n个和设置CUR-IDX至0. B.其他cur-max是解决方案。
  2. 姜黄素,IDX为CUR-MAX复发,如果它比CUR-MAX比低于

较高和较低的你可以开始低于为+ Inf.0和CUR-MAX是第一要素as -Inf.0。如果结果是-Inf.0,那么就没有解决方案。找到第二大#(5 5 5 5)