题目描述
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
实现
class Solution:
# 堆实现
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dict_ = dict()
# 开辟 dict 空间,存储数组中数字及出现频率
for x in nums:
if x in dict_:
dict_[x] += 1
else:
dict_[x] = 1
# 使用最小堆按出现频率排序,若堆中元素数量 >k 则弹出最小元素
# 最终堆中剩下频率前 k 高的元素
heap = []
import heapq
for key, val in dict_.items(): # O(nlogk)
heapq.heappush(heap, (val, key))
if len(heap) > k:
heapq.heappop(heap)
return [x[1] for x in heap]