题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
如输入:[4,5,1,6,2,7,3,8],4
输出则为:[1,2,3,4]
思路:排序,可以采用构建最小堆,重复k次,即找到了最小的个数,时间复杂度为
k
∗
l
o
g
n
k*logn
k∗logn
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.input = []
# 最小堆
def min_heap(self, input, n, i):
min_idx = i
l = i*2+1
r = i*2+2
if l < n and input[i] > input[l]:
min_idx = l
if r < n and input[min_idx] > input[r]:
min_idx = r
if min_idx != i:
input[i], input[min_idx] = input[min_idx], input[i]
self.min_heap(input, n, min_idx)
def GetLeastNumbers_Solution(self, tinput, k):
# write code here
result = []
# 边界条件
if len(tinput) < k or k <= 0:
return result
self.input = tinput
for j in range(k):
for i in range(len(self.input)-1, -1, -1):
self.min_heap(self.input, len(self.input), i)
print(self.input)
result.append(self.input[0])
self.input = self.input[1:]
return result