zoukankan      html  css  js  c++  java
  • 347. Top K Frequent Elements (Medium) 出现频率最多的 k 个元素

    设置若干个桶,每个桶存储出现频率相同的数。桶的下标表示数出现的频率,即第 i 个桶中存储的数出现的频率为 i。

    把数都放到桶之后,从后向前遍历桶,最先得到的 k 个数就是出现频率最多的的 k 个数。

    首先依旧使用哈希表统计频率,统计完成后,创建一个数组,将频率作为数组下标,对于出现频率不同的数字集合,存入对应的数组下标即可。

    import java.util.*;
    
    class Solution {
        
    
        public List<Integer> topKFrequent(int[] nums, int k) 
        {  
            // 使用字典,统计每个元素出现的次数,元素为键,次数为值
            HashMap<Integer, Integer> map = new HashMap<>();
            for(int num : nums)
            {
                if(map.containsKey(num))
                {
                    map.put(num, map.get(num)+1);
                }else{
                    map.put(num,1);
                }
            }
    
            //桶排序
            //将频率作为数组下标,对于出现频率不同的数字集合,存入对应的数组下标
            List<Integer>[] list = new List[nums.length+1];
            for(int key:map.keySet())
            {
                //获取出现的次数作为下标
                int i = map.get(key);  //根据值得到次数
                if(list[i] == null)
                {
                    list[i] = new ArrayList<>();
                }
                list[i].add(key);
            }
    
            List<Integer> res = new ArrayList<>();
    
            //倒序遍历数组获取出现顺序从大到小的排列
            for(int i = list.length - 1; i >= 0 && res.size() < k; i--)
            {
                if(list[i] == null) continue;
                res.addAll(list[i]);
            }
            return res;
        }
    }
  • 相关阅读:
    PHP笔记
    HTML5储存
    KeyDown,KeyPress和KeyUp详解(转)
    Vue.js和angular.js区别
    java 解析json的问题
    在Eclipse中使用JUnit4进行单元测试
    Ibatis代码自动生成工具——Abator安装与应用实例(图解)
    IT人员----怎么把电脑窗口设置成淡绿色
    Java面试题之数据库三范式是什么
    Java面试题之jsp相关
  • 原文地址:https://www.cnblogs.com/ziytong/p/12909341.html
Copyright © 2011-2022 走看看