#空间复杂度:O(n)import heapq
classSolution:deftopKFrequent(self, nums: List[int], k:int)-> List[int]:#要统计元素出现频率
map_ ={}#nums[i]:对应出现的次数for i inrange(len(nums)):
map_[nums[i]]= map_.get(nums[i],0)+1#对频率排序#定义一个小顶堆,大小为k
pri_que =[]#小顶堆#用固定大小为k的小顶堆,扫描所有频率的数值for key, freq in map_.items():
heapq.heappush(pri_que,(freq, key))#说明若是传入一个元组,则按照元组的第一个元素来建立堆,push操作是先放入完美二叉树的末尾,然后再把这个元素和父亲一一比较,找到他自己的位置,复杂度为logniflen(pri_que)> k:#如果堆的大小大于了K,则队列弹出,保证堆的大小一直为k
heapq.heappop(pri_que)#找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒序来输出到数组
result =[0]* k
for i inrange(k-1,-1,-1):
result[i]= heapq.heappop(pri_que)[1]#删除也是logn,首位互换,去尾,然后调头return result
# 反思1: