• 优先队列/最大堆


    优先队列/最大堆

    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;
        }
    }
    
  • 相关阅读:
    python 字符串前面加u,r,b的含义
    文本检测: CTPN
    ocr 识别 github 源码
    python 中写hive 脚本
    Win10 环境安装tesseract-ocr 4.00并配置环境变量
    OCR 识别原理
    pandas set_index和reset_index的用法
    整理 pandas 常用函数
    js es6 map 与 原生对象区别
    js 暂时性死区
  • 原文地址:https://www.cnblogs.com/kikochz/p/13401558.html
Copyright © 2020-2023  润新知