zoukankan      html  css  js  c++  java
  • LC 番外 heapsort 算法

    原始教程来源:

    链接

    代码

    class Solution:
        def sort_heap(self,nums):
            # 对heap进行排序
            self.build_heap(nums)
            for i in range(len(nums)-1,-1,-1):
                # i 和 头 互换,此时头是最大
                nums[i],nums[0] = nums[0],nums[i] 
                # 针对0位置做
                self.heapify(nums,i,0)
    
        def build_heap(self,nums):
            # 构造一个heap,即根节点是最大的一个完全二叉树
            n = len(nums)
            last_node = n-1
            parent = (last_node-1)//2 # 最后的父节点
            for i in range(parent,-1,-1):
                self.heapify(nums,n,i) # 处理到根为止
    
        def heapify(self,nums,n,i):
            # 这个函数将节点中,最大的值给捞上来
            # 出口
            if i >= n:
                return 
            c1 = 2 * i + 1 # 左孩子
            c2 = 2 * i + 2 # 右孩子
            max_i = i
            if c1 < n and nums[c1] > nums[max_i]:
                max_i = c1
            if c2 < n and nums[c2] > nums[max_i]:
                max_i = c2
            if max_i != i:
                nums[max_i],nums[i] = nums[i],nums[max_i]
                self.heapify(nums,n,max_i) # 递归,底层也做
    
        def findPeakElement(self, nums: List[int]) -> int:
            # 可以在这个题目中使用:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv4hjg/
            temp = nums.copy()
            self.sort_heap(nums)
            max_val = nums[-1]
            for i,v in enumerate(temp):
                if max_val == v:
                    return i
    
  • 相关阅读:
    dataTables的导出Excel功能
    jquery生成二维码图片
    angular2表单初体验
    台湾辅仁大学的python教程笔记
    浅说《测试用例》----给测试新手的
    测试员的工作与学习
    简单的表格代码
    特殊效果字体代码
    办公自动化的基本方法
    css网页的几种类型
  • 原文地址:https://www.cnblogs.com/kykai/p/14027998.html
Copyright © 2011-2022 走看看