zoukankan      html  css  js  c++  java
  • 215。数组中第K个最大元素(堆实现)

    class Solution:
        def findKthLargest(self, nums: List[int], k: int) -> int:
            """堆排序思想"""
    
            def heapify(array, start, end):
    
                while True:
                    max_pos = start #初始化最大值所在位置为目标所在
                    if start*2 + 1 <= end and array[max_pos] < array[start*2+1]:
                        # 如果左叶子节点存在,且大于目标值,则将最大值所在位置指向该节点所在位置
                        max_pos = start*2 + 1
                    if start*2 + 2 <= end and array[max_pos] < array[start*2+2]:
                        # 如果右叶子节点存在,且大于目标值,则将最大值所在位置指向该节点所在位置
                        max_pos = start*2 + 2
                    if max_pos == start:
                        # 如果目标即为最大,完成该节点堆化,跳出循环
                        break
                    # 交换位置,将最大值
                    array[start], array[max_pos] = array[max_pos], array[start]
                    start = max_pos
    
            # 建堆,只需要对前半节点堆化
            for i in range(len(nums)//2-1, -1, -1):
                heapify(nums, i, len(nums)-1)
            # 排序,只需要循环K次,排序TOP K个节点
            i = len(nums) - 1
            while i > len(nums) - 1 - k:
                nums[0], nums[i] = nums[i], nums[0]
                i -= 1
                heapify(nums, 0, i)
            return nums[len(nums)-k]
    
  • 相关阅读:
    题解报告:hdu 2062 Subset sequence
    CSS3滑块菜单
    CSS3环形动画菜单
    可折叠显示的发光搜索表单
    Tab动画菜单
    侧边自定义滚动条
    css3条纹边框效果
    css3图片过滤效果
    CSS3图片悬停放大动画
    CSS3响应式侧边菜单
  • 原文地址:https://www.cnblogs.com/changting/p/13741256.html
Copyright © 2011-2022 走看看