#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param input int整型一维数组
# @param k int整型
# @return int整型一维数组
#
class Solution:
# 小顶堆
# 小堆就是把小的放在后面 [..., 4,3,2,1]
# 所以需要反切片
def adjust_min_heap(self, nums, pos, length):
dad = pos
son = dad * 2 + 1
while son < length:
if son + 1 < length and nums[son] > nums[son+1]:
son += 1
if nums[dad] > nums[son]:
nums[dad], nums[son] = nums[son], nums[dad]
dad = son
son = 2 * dad + 1
else:
break
def heap(self, nums,k):
n = len(nums)
for i in range(n // 2 -1, -1,-1):
self.adjust_min_heap(nums, i, n)
for j in range(n-1, n-k- 1,-1):
nums[0], nums[j] = nums[j], nums[0]
self.adjust_min_heap(nums, 0, j)
def GetLeastNumbers_Solution(self , input: List[int], k: int) -> List[int]:
self.heap(input,k)
return input[-1:-k-1:-1]
# 直接调库
# import heapq
# return heapq.nsmallest(k,input)