劍指Offer 29 最小的k個數

2021-09-24 17:00:35 字數 992 閱讀 8514

目錄

基礎補充

解法一:輸入陣列排序,然後取前k個

解法二:基於partition函式

解法三:最大堆/最小堆

3.1 時間複雜度o(nlogn)空間複雜度o(n)

3.2 時間複雜度o(nlogk)空間複雜度o(k)

解法四:紅黑樹:multiset集合

python排序實現

vector的使用方法:

文中提到需要特別注意:

使用vector需要注意以下幾點

1、如果你要表示的向量長度較長,需要為向量內部儲存很多數容易導致記憶體洩漏而且效率會很低

2、vector作為函式的引數或者返回值時需要注意它的寫法

double distance(vector&a, vector&b) 其中的「&」絕對不能少

class solution 

int partition(vector&data, int begin, int end)

return res;

}};

最小堆:好處和上面一樣,同樣是簡潔明瞭。壞處也類似,同樣用堆,時間複雜度空間複雜度都可以再提高。

class solution {

public:

vectorgetleastnumbers_solution(vectorinput, int k) {

//最小堆

int n = input.size();

vectorres;

if(input.empty() || n, greater> pq(input.begin(), input.end());

for (int i=0; i最大堆:

最小堆:

(待補充)

參考我的另一篇部落格:

劍指Offer (29)最小的k個數

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。實現如下 測試用例中給出的返回值是有序的。嘖嘖。找到序列中最小的k個數,利用set,對數字進行insert或erase 紅黑樹中查詢 插入 刪除操作都為 o logk 最...

劍指offer 29 最小的K個數

題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,思路分析 簡單思路 先快排,再取數 coding utf 8 class solution def getleastnumbers solution self,tinput,...

劍指offer 29 最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。最簡單容易想到的就是先排序,然後輸出前k個數即可。但是這樣明顯時間複雜度比較高。也可以使用另外的方法,具體不再詳述。class solution for int i 0 i inp...