題目描述
輸入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)]