zoukankan      html  css  js  c++  java
  • 优先队列/最大堆

    优先队列/最大堆

    347.前k个高频元素

    给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

    示例 1:

    输入: nums = [1,1,1,2,2,3], k = 2
    输出: [1,2]
    

    示例 2:

    输入: nums = [1], k = 1
    输出: [1]
    

    解法一

    EntrySet转为List

    class Solution {
        public int[] topKFrequent(int[] nums, int k) {
            Map<Integer,Integer> map = new HashMap<>();
            for(int i = 0; i < nums.length;i++){
                if(map.containsKey(nums[i])){
                    map.put(nums[i],map.get(nums[i])+1);
                }else{
                    map.put(nums[i],1);
                }
            }
            //将map的entrySet转为ArrayList
            ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
            Collections.sort(list,(a,b)->b.getValue() - a.getValue());
            int[] res = new int[k];
            for(int i = 0; i < k;i++){
                res[i] = list.get(i).getKey();
            }
            return res;
        }
    }
    

    解法二

    优先队列, 队列中存放key, 比较规则为value大的放在前面

    class Solution {
        public int[] topKFrequent(int[] nums, int k) {
            Map<Integer,Integer> map = new HashMap<>();
            for(int i = 0; i < nums.length;i++){
                //如果map种不含有指定的key, 就返回0
                int times = map.getOrDefault(nums[i],0);
                map.put(nums[i],times+1);
            }
            //使用优先队列(最大堆),按照key的value从大到小排序
            Queue<Integer> q = new PriorityQueue<>((a,b)->map.get(b)-map.get(a));
            for(Integer key:map.keySet()){
                q.add(key);
            }
            int[] res = new int[k];
            for(int i = 0; i < k;i++){
                res[i] = q.poll();
            }
            return res;
        }
    }
    
  • 相关阅读:
    求树的直径算法
    二叉排序树BST+求树深度算法
    HDU1114Piggy-Bank(完全背包)
    HDU1102(最小生成树Kruskal算法)
    NYoj289苹果(0-1背包)
    NYOJ201作业题
    C#发送邮件附件
    JS用户登录保存账号密码
    远程连接服务器
    博客园页面更新了
  • 原文地址:https://www.cnblogs.com/kikochz/p/13401558.html
Copyright © 2011-2022 走看看