题目描述
输入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)]