第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