最小的k個數(大根堆法) 劍指Offer

2021-10-05 18:49:49 字數 750 閱讀 1062

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

這個題主要是通過構建大根堆來實現的,首先構建大小為k的大根堆,這樣陣列中最大的k個數就在其中,然後和陣列中的其他樹進行比較:

如果陣列中的數《大根堆堆頂,那麼將這個數和大根堆堆頂進行交換,之後在進行大根堆順序的調整,這樣一直遍歷,直到陣列末尾。

最終大根堆中的k個數就是陣列中最小的k個數。

詳情請看**注釋。

class

solution

; vector<

int> result;

for(

int i=input.

size()

/2-1

;i>=

0;i--

)adjustheap

(input,i,k)

;//構建大根堆

//將第k+1個數到末尾和大根堆的k個數進行比較

for(

int i=k;isize()

;i++)}

//構建最終的k個數

for(

int i=

0;i)return result;

}void

adjustheap

(vector<

int>

&input,

int i,

int n)}}

;

劍指offer 最小k個數

1.題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2.方法 1 基於堆排序演算法,構建最大堆。時間複雜度為o nlogk 2 如果用快速排序,時間複雜度為o nlogn 3 如果用插入排序,時間複雜度為o n 2 3.演...

劍指offer 最小的K個數

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 4 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,解析 基於插入排序的思想可以想到使用乙個長度為k的排序陣列儲存最小的k個元素,複雜度o nk 基於...

《劍指offer》最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入給整數陣列,和k 找出其中最小的k個數 class solution 1 先用插入排序對陣列中數進行排序。2 取出有序陣列中最小的kge。附 這只是乙個比較簡單的方法。如果考慮...