題目描述
輸入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...