题解 | #最小的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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务