题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
长度为k的辅助数组。
- 每次遍历到一个数,可能需要给辅助数组排序,因此时间复杂度是\(n\log k\)
1 | class Solution: |
用内置的堆实现heapq,性能也不错: 1
2
3
4
5
6
7
8import 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)]
用快排的partition方法来找到第k大的数,那么该数以及其左侧k-1个数一起,就是最小的k个数。
1 | class Solution: |