美文网首页
最小的K个数 python

最小的K个数 python

作者: 小歪与大白兔 | 来源:发表于2018-08-29 22:17 被阅读0次

采用最大堆实现
父节点i的左孩子为 2i + 1,右孩子为2i+2
建立堆是从最后一个非叶子节点开始调整,该节点为len(heap)/2 - 1

# -*- coding:utf-8 -*-
class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        if k>len(tinput) or k ==0:
            return []
        heap = tinput[:k]
        self.build_max_heap(heap)
        for i in range(k,len(tinput)):
            if tinput[i]<heap[0]:
                heap[0] = tinput[i]
                self.max_heapify(heap,k,0)
        return self.heapsort(heap)

    #取top k小要建立最大堆
    def build_max_heap(self,heap):
        length = len(heap)
        #从最后一个非叶子节点开始进行进行调整
        for i in range(length/2-1,-1,-1):
            self.max_heapify(heap,length,i)
    #堆调整
    def max_heapify(self,heap,length,root):
        left = 2*root + 1
        right = 2*root + 2
        biger = root
        if left<length and heap[left]>heap[biger]:
            biger = left
        if right<length and heap[right]>heap[biger]:
            biger = right
        if biger!=root:
            heap[biger],heap[root] = heap[root],heap[biger]
            self.max_heapify(heap,length,biger)
    #实现heap从小到大。
    def heapsort(self,heap):
        length = len(heap)
        for i in range(length-1,-1,-1):
            heap[0],heap[i] = heap[i],heap[0]
            self.max_heapify(heap,i,0)
        return heap
s = Solution()
print s.GetLeastNumbers_Solution([4,5,1,6,2,7,3,8],6)

相关文章

  • 最小的K个数 python

    采用最大堆实现父节点i的左孩子为 2i + 1,右孩子为2i+2建立堆是从最后一个非叶子节点开始调整,该节点为le...

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • 最小的k个数

    问题描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3...

  • 最小的K个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

  • 最小的k个数

    参考: [1] https://www.nowcoder.com/questionTerminal/6a296eb...

  • 最小的K个数

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

  • 最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

    问题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,...

  • 最小的k个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

网友评论

      本文标题:最小的K个数 python

      本文链接:https://www.haomeiwen.com/subject/mxrlwftx.html