劍指offer 最小的k個數(查詢)

2021-09-12 18:00:44 字數 953 閱讀 4671

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

class

solution

else

}// vectorret(input.begin(),input.begin() + k);

vector<

int> ret;

for(

int i =

0; i < k;

++i)

return ret;

}int

partition

(vector<

int>

&data,

int start,

int end)

data[start]

= key;

return start;}}

;

思路二:利用堆排序,o(n logk),適合處理海量資料

(1) 遍歷輸入陣列,將前k個數插入到推中;(利用multiset來做為堆的實現)

(2) 繼續從輸入陣列中讀入元素做為待插入整數,並將它與堆中最大值比較:如果待插入的值比當前已有的最大值小,則用這個數替換當前已有的最大值;如果待插入的值比當前已有的最大值還大,則拋棄這個數,繼續讀下乙個數。

這樣動態維護堆中這k個數,以保證它只儲存輸入陣列中的前k個最小的數,最後輸出堆即可。

class

solution

else}}

for(itergreater = leastnumbers.

begin()

;itergreater!=leastnumbers.

end();

++itergreater)

return result;}}

;

劍指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。附 這只是乙個比較簡單的方法。如果考慮...