当前位置:   article > 正文

leetcode 347 数组中前k个高频元素

leetcode 347 数组中前k个高频元素

解题思路:一个map,一个heap,和一个存放结果的列表list

1.map存储数组中元素和元素出现的频数

2.heap用来生成并维护一个具有k个元素的小顶堆,当元素个数超过k时,将堆顶元素弹出,最后留在堆里的元素即为最终的结果,存放在列表中

  1. import heapq
  2. class Solution:
  3. def top_k_freq(self, nums, k):
  4. #map用于存放数组中的元素及其出现的频数,分别用key,value存储
  5. map_freq = {}
  6. #小根堆,维持k个元素的小根堆,将剩余的元素输入并做调整后输出,最后留在小根堆里的元素逆序排
  7. #列就是前k个高频元素
  8. heap = []
  9. for i in range(len(nums)):
  10. map_freq[nums[i]] = map_freq.get(nums[i], 0) + 1
  11. for key, value in map_freq.items():
  12. heapq.heappush(heap, (value, key))
  13. #维持k个元素的小根堆,若元素个数超过k个,就将堆顶元素弹出
  14. if len(heap) > k:
  15. heapq.heappop(heap)
  16. res = [0] * k
  17. for i in range(k-1, -1, -1):
  18. res[i] = heapq.heappop(heap)[1]
  19. return res
  20. s = Solution()
  21. res = s.top_k_freq(nums=[1,1,1,2,2,3], k=2)
  22. print(res)

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

闽ICP备14008679号