【劍指Offer】29.最小的k個數

題目描述

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

解題思路

最簡單的思路:把輸入的n個正數排序,排序之後位於最前面的k個數就是最小的k個數。O(nlogn)

O(n)的算法,當我們可以修改輸入的數組時可用

通過數組的第k個數字來調整,使得比第k個數字小的所有數字都位於數組的左邊,比k個數字都打的所有數字都位於數組的右邊。

這樣調整之後,位於數組中左邊的k個數字就是最小的k個數字

基於Partition函數的思路

# -*- coding:utf-8 -*-
import heapq
 
class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        if not tinput or not k or k > len(tinput):
            return []
        heapq.heapify(tinput)
        return [heapq.heappop(tinput) for _ in xrange(k)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章