跳过正文
  1. leetcode 题解/

347_前_K_个高频元素

·85 字·1 分钟

类型:堆

    1. 前 K 个高频元素 💛

    https://leetcode-cn.com/problems/top-k-frequent-elements/

    ❓ 返回数组中出现频率前 k 高的元素。

    💡 哈希 + 堆

    先用哈希记录每个元素的出现次数。再以出现次数为比较键构建堆。

    class Solution:
        def topKFrequent(self, nums: List[int], k: int) -> List[int]:
            if not nums:
                return []
            counts = {}
            for num in nums:
                if num in counts:
                    counts[num] += 1
                else:
                    counts[num] = 1
    
            heap = []
            for num in counts:
                count = counts[num]
                if len(heap) < k or count > heap[0][0]:
                    heapq.heappush(heap, (counts[num], num))
                if len(heap) > k:
                    heapq.heappop(heap)
            ans = []
            for (_, num) in heap:
                ans.append(num)
            return ans