找出数组中出现次数最多的前k个元素

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

例如,给定数组 [1,1,1,2,2,3] , 和 k = 2,返回 [1,2]。

注意:

你可以假设给定的 k 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

解题思路:
采用map存储每个元素出现的次数。
然后按照键值对的value逆序排序。
取前k个值。

public List<Integer> getMaxFrequnceK(int[] a,int k){
        Map<Integer, Integer> map=new HashMap();
        for(int i=0;i<a.length;i++){
            if(map.containsKey(a[i])){
                map.put(a[i], map.get(a[i])+1);
            }
            else{
                map.put(a[i], 1);
            }
        }
        List<Map.Entry<Integer, Integer>> list=new ArrayList(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>(){
            //降序
            @Override
            public int compare(Entry<Integer, Integer> o1,
                    Entry<Integer, Integer> o2) {
                return o2.getValue()-o1.getValue();
            }
            
        });
        List<Integer> resList=new ArrayList<>();
        for(Map.Entry<Integer, Integer> entry:list){
            
            resList.add(entry.getKey());
            if(resList.size()==k){
                break;
            }
            
        }
        return resList;
    }

compator的compare方法,o1-o2为升序,o2-o1为降序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这个时代下的网红有三个特点:专业程度更强,变现能力更大,商业价值更高。回头看看以前的凤姐,再看看如今的Papi酱…...
    寐思阅读 398评论 0 1
  • 姓名:冯健 305A期学员 【日精进打卡第20天】 一、【知~勤学】 ①持诵 《六项精进》背诵大纲0遍总60遍 《...
    冯jian阅读 178评论 0 1

友情链接更多精彩内容