Skip to content

题目描述

给定非空整数数组,返回出现频率前 k 高的元素。

解题思路

先用字典统计频率,然后用大小为 k 的最小堆,按频率排序,堆满后弹出频率最低的。

heapq 是最小堆,所以用 (freq, num) 元组时,堆顶是频率最低的。Python 的元组比较会逐元素比较,freq 相同时按 num 比较(num 要是可比较的)。

代码实现

python
import heapq
from collections import Counter

class Solution:
    def topKFrequent(self, nums: list[int], k: int) -> list[int]:
        count = Counter(nums)
        # 最小堆,按频率排序,堆满 k 个后弹出最小的
        heap = []
        for num, freq in count.items():
            heapq.heappush(heap, (freq, num))
            if len(heap) > k:
                heapq.heappop(heap)
        return [num for freq, num in heap]

复杂度分析

  • 时间复杂度: O(n log k)
  • 空间复杂度: O(n)

关键要点

  • 哈希表统计频率 + 最小堆取 Top-K。

基于 VitePress 构建