2013-12-07 41 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)