劍指offer29 最小的k個數

2021-09-27 06:53:33 字數 946 閱讀 3361

題目描述

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

一:選擇排序,時間複雜度o(kn)

選擇排序,只遍歷k輪,選擇出前k個最小的數字

class solution 

return res;}}

;

二、堆/優先佇列,時間複雜度o(nlogk)

使用長度為k的輔助優先佇列q,在預設大根堆的優先佇列中,top位置的元素是該佇列中最大的元素。

遍歷一次陣列,

(1)如果佇列未滿,則按順序插入陣列

(2)佇列已滿,且此時i號數字小於佇列中top位數字,則top彈出,將i號數字入隊

在乙個大根堆中,我們可以在o(1)的時間內得到k個數字中的最大數,然後需要o(logk)的時間完成刪除和插入操作。所以總時間複雜度為o(nlogk)。

class solution 

}while

(!q.

empty()

)return res;}}

;

三、partition,時間複雜度o(n)

class solution 

else

}for

(int i=

0;i) res[i]

=input[i]

;return res;

}int

partition

(vector<

int> a,

int low,

int high)

a[low]

=p;return low;}}

;

劍指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...