当前位置:   article > 正文

Leetcode347. 前 K 个高频元素 Top K Frequent Elements - Python 以小顶堆实现_python map topk

python map topk
  1. import heapq
  2. class Solution:
  3. def topKFrequent(self, nums: List[int], k: int) -> List[int]:
  4. map_ = {} #用字典遍历整个nums,存储各元素出现频率
  5. for i in range(0,len(nums)):
  6. map_[nums[i]] = map_.get(nums[i],0) + 1
  7. pri_q = []
  8. #用小顶堆遍历整个map,不断将频率表按照频率从小到大排列
  9. for key, freq in map_.items():
  10. heapq.heappush(pri_q,(freq,key))
  11. if len(pri_q) > k: #只维护前k个元素
  12. heapq.heappop(pri_q) #弹出的是最小的频率次数,高频数字会被保留
  13. result= [0]*k
  14. # for i in range(0,len(pri_q)):
  15. # result[i] = pri_q[i][1] #因题目要求可以按任意顺序返回结果,所以可以不按频率高低返回
  16. for i in range(k-1,-1,-1):
  17. result[i] = heapq.heappop(pri_q)[1] #练习一下按照频率高低返回
  18. return result

思路:

此题需要掌握了解小顶堆,大顶堆以及优先队列的工作原理。【从堆的定义到优先队列、堆排序】 10分钟看懂必考的数据结构——堆_哔哩哔哩_bilibili

其次需要注意整个流程:

先将各个数字频率加入哈希表;

用小顶堆而不是大顶堆建堆遍历哈希表,因为小顶堆每次弹出的是最小频率,将高频率保存了下来;

只需维护前k个元素即可;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/72804
推荐阅读
相关标签
  

闽ICP备14008679号