C 用堆來找到一組數中第K大的數字

2021-09-27 08:57:35 字數 580 閱讀 1307

問題思路:

既然要找第k大的數字,那我們就建立乙個size為k的最 小 堆。最小堆的根結點就是這個堆裡,k個數中最小的。那麼我們只要確保這k個數是輸入的一組數中最大的k個數,那麼最後返回堆的根結點就行了。

建立完乙個空的最小堆之後,之後的工作就是往裡面push數字了。當然前k個數,我們就不管三七二十一,直接push進去(畢竟要先把堆的k個結點填滿吧 – )。當然每次進行push操作的時候,就會把堆調整一下,使其仍為乙個最小堆。當然這是push函式內部完成的操作,但我們必須意識到它幹了調整這件事。之後,當要push第k+1個數字時,要判斷了。如果此時的堆的根結點(top)比第k+1個數字 小,那我們就需要把根結點pop出去(給別人讓座 - -),然後把第k+1個數push進來。反之,就略過第k+1個數。繼續判斷第k+2個數,直到遍歷完整個輸入的陣列為止。

源**:

class solution

else}}

return q.

top();

}};

main函式:

int

main()

求一組整數的第k小的數

題目 求一組整數的第k小的數 輸入 5 2 10 60 4 2 7 輸出 4 解題思路 1 使用快速排序的思路解題。2 與快排不同的是,快排會在排序結束才會結束。此題也是從小到大排序,但是,只要找到第k小的數,就跳出遞迴。3 此題有一些小地方可以優化容易忽略,比如判斷k是否會大於n,判斷用i和j掃瞄...

C 堆 heap 求陣列中第K大的數

已知乙個未排序的陣列,求這個陣列中第k大的數字。思路 維護乙個k大小的最小堆,堆中元素個數小於k時,新元素直接進入堆 否則 當堆頂小於新元素時,彈出堆頂,將新元素加入堆。解釋 由於堆是最小堆,堆頂是堆中最小元素,新元素都會保證比堆頂小,否則新元素替換堆頂,故堆中k個元素是已掃瞄的元素裡最大的k個 堆...

求一組數中的第K大數,採用遞迴方法

參考陳越的 資料結構 用遞迴的方法實現尋找一組數中的第k大數。使用了動態陣列和清屏函式。如下 include include name 找第k大數 author demosees date 23 03 17 19 35 description 找一組數中的第k大,採用遞迴的方法解決。void swa...