#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @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)