题解 | #最小的K个数#——使用最大堆排序解
最小的K个数
https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param input int整型一维数组
# @param k int整型
# @return int整型一维数组
#
class Solution:
def GetLeastNumbers_Solution(self, input: List[int], k: int) -> List[int]:
# write code here
input = self.heapsort(input)
print(input)
return input[0:k]
def heapify(self,arr,n,i):
'''
:param arr: 存储堆的数组
:param n: 数组长度
:param i: 待维护节点的下标
:return:
'''
largest = i
#假设父节点最大,找到左节点、右节点下标
left = i*2+1
right = i*2+2
if left<n and arr[largest]<arr[left]:
largest = left
if right<n and arr[largest]<arr[right]:
largest = right
if largest != i:
arr[i],arr[largest]=arr[largest],arr[i]
self.heapify(arr,n,largest)
def heapsort(self,arr):
#建堆
n = len(arr)
for i in range(n,-1,-1):
self.heapify(arr,n,i)
#排序
for i in range(n-1,0,-1):
arr[i],arr[0]=arr[0],arr[i]
self.heapify(arr,i,0)
# 重新维护剩余i个元素
return arr

