题目描述:
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解题方案:
python内置函数sorted()采用快排进行排序,之后输出前k个数:
# -*- coding:utf-8 -*-
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
# write code here
if k > len(tinput):
return []
return sorted(tinput)[:k]
另一种思路是采用堆数据结构,并从堆中输出k次,其中使用heapq模块实现。
堆的第一个元素是最小值,pop之后再对堆进行更新。
import heapq
heap = [] # creates an empty heap
heappush(heap, item) # pushes a new item on the heap
item = heappop(heap) # pops the smallest item from the heap
item = heap[0] # smallest item on the heap without popping it
heapify(x) # transforms list into a heap, in-place, in linear time
item = heapreplace(heap, item) # pops and returns smallest item, and adds
# new item; the heap size is unchanged
# -*- 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)]