5.查詢最小的 k 個元素
題目:輸入 n 個整數,輸出其中最小的 k 個。
例如輸入1,2,3,4,5,6,7 和8 這8 個數字,則最小的4 個數字為1,2,3 和4。
基本思路:
使用堆排序基本思想,對堆排序做小小修改,在堆排序的演算法中增加乙個變數k,表示只需要最小的k個數。
那麼意味著在最初的小根堆建立起來的基礎上,進行k次的堆頂值轉移至陣列尾部。
在第k次退出,在陣列的尾部就會出現k個最小數的組成的遞減序列了,從尾部開始列印陣列k個數就可以了。
時間複雜度分析:
n + k * log(n)
複習:堆排序的基本思路:
1)首先建立最初的小根堆
需要從堆的第乙個非葉子結點開始到根節點進行堆調整,那麼得到最初的小根堆
得到小根堆的結果僅僅是最小的值在堆頂
2)每次將小根堆的堆頂最小值放入陣列的後面,
即每次讓堆頂值與陣列尾部交換,在陣列尾部形成乙個倒序的有序序列,得到的結果是第一小值放在倒數第一的位置,而第k小的放在倒數第k位置
3)每次交換後,前面n-1個結點就不符合小根堆的要求了,需要調整
**:結果:
程式設計師面試一百題 05 查詢最小的k個元素
1 題目 輸入n個整數,輸出其中最小的k個。2 示例 輸入1,2,3,4,5,6,7,8八個數,則最小的4個數為1,2,3,4。3 思路 3.1 最簡單的思路就是將n個數排序,然後取出最小的k個數,但是這樣的時間複雜度為o n logn 3.2 我們嘗試更快的思路。可以開闢乙個長度為k的陣列karr...
查詢最小的k個元素 微軟面試100題 第五題
題目要求 輸入n個整數,輸出其中最小的k個。例如 輸入1,2,3,4,5,6,7,8這8個數字,則最小的4個數字為1,2,3,4。參考資料 劍指offer第30題。題目分析 解法一 用快排的思想,但是最小的k個數不用排序,時間複雜度o n 優點 時間複雜度好,缺點 會修改原整數陣列順序。解法二 建立...
第5題 查詢最小的K個元素
第5題 輸入n個整數,輸出其中最小的k個。陣列 例如輸入1,2,3,4,5,6,7,8 這8個數字,則最小的4個數字為1,2,3,4 此處就是排序 氣泡排序 快排 選擇排序等,擇一進行修改應該就可以了。package test005 created by cq on 2015 3 30.第5題 輸入...