当前位置:   article > 正文

leetcode347. 前 K 个高频元素_1.给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你

1.给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你

1.题目描述:

给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。

2.使用hashmap统计频次,再对value值进行排序(treeset只能对key排序),采用逆序取前k个值(需要完全遍历entryset排序),相当于大顶堆,时间复杂度O(nlogn)。

  1. class Solution {
  2. public int[] topKFrequent(int[] nums, int k) {
  3. Map<Integer, Integer> map = new HashMap<>();
  4. for (int i : nums) {
  5. if (map.containsKey(i)) map.put(i, map.get(i) + 1);
  6. else map.put(i, 1);
  7. }
  8. //PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>((o1, o2) -> o2.getValue() - o1.getValue());
  9. PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>(new Comparator<Map.Entry<Integer, Integer>>() {
  10. public int compare(Map.Entry<Integer, Integer> entry1, Map.Entry<Integer, Integer> entry2) {
  11. return entry2.getValue() - entry1.getValue();
  12. }
  13. });
  14. //pq.addAll(map.entrySet());
  15. for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  16. pq.offer(entry);
  17. }
  18. int[] arr = new int[k];
  19. for (int i = 0 ; i < k; i++) {
  20. arr[i] = pq.poll().getKey();
  21. }
  22. return arr;
  23. }
  24. }

3.使用hashmap统计频次,再对value值进行排序(treeset只能对key排序),采用顺序k个最大值(只维护k个entry的排序),相当于小顶堆,时间复杂度O(nlogk)。

  1. class Solution {
  2. public int[] topKFrequent(int[] nums, int k) {
  3. Map<Integer, Integer> map = new HashMap<>();
  4. for (int i : nums) {
  5. if (map.containsKey(i)) map.put(i, map.get(i) + 1);
  6. else map.put(i, 1);
  7. }
  8. PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>((o1, o2) -> o1.getValue() - o2.getValue());
  9. for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  10. pq.offer(entry);
  11. if (pq.size() > k) {
  12. pq.poll();//添加当前entry后每次移除最小元素
  13. }
  14. }
  15. int[] arr = new int[k];
  16. for (int i = 0 ; i < k; i++) {
  17. arr[i] = pq.poll().getKey();
  18. }
  19. return arr;
  20. }
  21. }

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

闽ICP备14008679号