劍指Offer(Python多種思路實現):最小的k個數

面試40題:

題目:最小的k個數

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

解題思路一:

class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        if k >len(tinput):
            return []
        tinput.sort()
        return tinput[:k]

解題思路二:

class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        # write code here
        import heapq
        #此方法時間複雜度爲O(nlogk)
        if k >len(tinput):
            return []
        return heapq.nsmallest(k,tinput)

解題思路三:

def GetLeastNumbers_Solution(self, tinput, k):
    import heapq as hq
    if k > len(tinput) or k <= 0: return []
    heap = [-x for x in tinput[:k]]
    hq.heapify(heap)
    for num in tinput[k:]:
        if -heap[0] > num:
            hq.heapreplace(heap, -num)
    return sorted(-x for x in heap)

 

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