【栈与队列】leecode347.前k个高频元素

题目:
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
【栈与队列】leecode347.前k个高频元素
思路:
优先级队列,即堆
题目未要求按序输出,但我们这里的解答是按频率由高到低输出元素的。
按频率建立大小为k的小根堆,最终堆中将留下频率最高的k个元素。
(小根堆每次弹出最小的,最终堆中留下的是最大的几个元素)

解答:

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        #统计元素出现频率
        dic=defaultdict(int)
        for num in nums:
            dic[num]+=1

        #使用大小为k的小根堆,对频率进行排序
        heap=[]
        for key,fre in dic.items():
            heapq.heappush(heap,(fre,key))
            #维持堆的大小为k
            if len(heap)>k:
                heapq.heappop(heap)
        
        #输出前k个高频元素,每次弹出最小的
        result=[0]*k
        for i in range(k-1,-1,-1):
            result[i]=heapq.heappop(heap)[1]
        return result
上一篇:标准模板库巧解算法题 优先队列


下一篇:go语言学习笔记 — 基础 — 基本语法— 常量与变量 — 变量的生命周期(2):堆(heap)