当前位置: 首页 > article >正文

leetcode hot 100 前k个高平元素

347. 前 K 个高频元素

已解答

中等

相关标签

相关企业

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

class Solution(object):
    def topKFrequent(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        def shift_up(heap , tmp):
            heap.append(tmp)
            child = len(heap)-1
            while child/2>0 and heap[child/2][1]>heap[child][1]:
                # 向上交换一个
                x=heap[child/2]
                heap[child/2] = heap[child]
                heap[child] = x
                child/=2
            



        def shift_down(heap):
            # 把左右子树里面较小的那个放到上面来
            parent =1 
            
            while parent*2  <= k  :
                if parent*2 == k:
                    child = parent*2
                else:
                    if heap[parent*2][1] > heap[parent*2+1][1]:
                        child = parent*2+1
                    else:
                        child = parent*2
                if heap[parent][1]>heap[child][1]:
                    # huan
                    # heap[parent] =heap[child]
                    x = heap[parent]
                    heap[parent] = heap[child]
                    heap[child] = x
                    parent = child
                else:
                    break
           
            
            

        heap=[(None,0)]

        frequency = {}
        frequency_list=[]
        for tmp in nums:
            if frequency.get(tmp)==None:
                frequency[tmp]=1
            else:
                frequency[tmp]+=1
        
        for tmp in frequency.keys():
            frequency_list.append((tmp,frequency[tmp]))


        # print(frequency_list)
        # 对于前k个数字,直接上浮
        for i in range(k):
            shift_up(heap,frequency_list[i])

        
        
        for i in range(k,len(frequency_list)):
            if frequency_list[i][1]>heap[1][1]:
                heap[1] = frequency_list[i]
                shift_down(heap)
                

        ans=[]
        for i in range(1,len(heap)):
            ans.append(heap[i][0])

        return ans

        

主要是要知道这里需要使用的是堆,而且求最大的几个就是最小堆,因为每次都是把最小的给扔出来,这样才是位置最大的几个。不需要最前面搞个空的东西其实


http://www.kler.cn/a/461894.html

相关文章:

  • 热备份路由HSRP及配置案例
  • 2023最新版IDEA创建一个SpringBoot项目 (详细教程)
  • 科研绘图系列:R语言科研绘图之标记热图(heatmap)
  • npm install --global windows-build-tools --save 失败
  • 从0到机器视觉工程师(二):封装调用静态库和动态库
  • MYSQL--------选择合适的数据类型
  • 线程同步——使用场景区分
  • 【每日学点鸿蒙知识】grid里面的item支持拖动问题、WebView回调问题、获取页面名称、弹幕效果实现、修改App输出路径 |
  • 基础14 C++申请内存的各种方法
  • 自动化测试的心得
  • Singleton: WebRTC中ThreadManager中的单例模式
  • [创业之路-231]:《华为闭环战略管理》-5-企业组织架构、业务架构、技术架构、产品架构等它们有哪些不同的地方,又有哪些是相同的?
  • 数据库的使用09:使用SSMS工具将SQLsever数据导出到Excel
  • 【架构-38】如何选择通信协议和数据格式
  • 视频智能翻译
  • Java List 源码解析——从基础到深度剖析
  • Postman[2] 入门——界面介绍
  • 赛博周刊·2024年度工具精选(图片设计类)
  • 基于STM32的智能床垫控制系统的Proteus仿真
  • 直流开关电源技术及应用二
  • 麒麟信安云在长沙某银行的应用入选“云建设与应用领航计划(2024)”,打造湖湘金融云化升级优质范本
  • python ai ReAct 代理(ReAct Agent)
  • ulimit命令与nginx的联系
  • 【Linux报告】实训六 重置超级用户密码
  • Docker--Docker Network(网络)
  • Java:认识异常(超详解)