劍指offer第二版(Python3)--面試題40 : 最小的k個數

第2章 面試需要的基礎知識

第3章 高質量的代碼

第4章 解決面試題的思路

第5章 優化時間和空間效率

  面試題39 : 數組中出現次數超過一半的數字

  面試題40 : 最小的k個數

第6章 面試中的各項能力

第7章 兩個面試案例


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

解題思路
  可以創建一個大小爲k的數據容器來存儲最小的k個數字,然後每次從輸入的n個整數中讀入一個數。每次拿讀入的數與當前容器中最大值比較,若讀入的數小於最大值,則將其加入容器中,並對容器排序,最後拋棄容器中最大值;若讀入的數大於最大值,直接拋棄,然後繼續讀入下一個數。容器的最佳實現是使用最大堆,但下面我們直接用Python提供的排序函數。

實戰

class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        # write code here
        if not tinput or k <= 0 or k > len(tinput):
            return []
            
        results = sorted(tinput[:k])
        for number in tinput[k:]:
            if number < results[-1]:
                results.append(number)
                results = sorted(results)
                results = results[:-1]
            
        return results
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章