前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[LeetCode] 347. Top K Frequent Elements

[LeetCode] 347. Top K Frequent Elements

作者头像
用户1148830
发布2018-01-03 17:55:30
9190
发布2018-01-03 17:55:30
举报

【原题】 Given a non-empty array of integers, return the k most frequent elements.

For example, Given [1,1,1,2,2,3] and k = 2, return [1,2]. 【解释】 返回数组中出现最频繁的k个元素。 【思路】 思路一、hashmap统计频次,再对hashmap的value进行排序,取前面的k个最频繁的数。思路很简单,hashmap的value进行排序的过程,参照这里

代码语言:javascript
复制
public class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        Map<Integer,Integer> hash=new HashMap<>();
         List<Integer> list=new ArrayList<Integer>();
            for(int i=0;i<nums.length;i++){
            //可以使用hash.put(nums[i], hash.containsKey(nums[i])? hash.get(nums[i]) + 1 : 1);语句代替
                if(hash.containsKey(nums[i]))
                    hash.put(nums[i], hash.get(nums[i])+1);
                else hash.put(nums[i],1);
            }
            Comparator<Map.Entry<Integer, Integer>> byMapValues = new Comparator<Map.Entry<Integer, Integer>>() {
                @Override
                public int compare(Map.Entry<Integer, Integer> left, Map.Entry<Integer, Integer> right) {
                       return right.getValue().compareTo(left.getValue());//按照单词频率逆序排列
                }
            };
            List<Map.Entry<Integer, Integer>> sortedListMap = new ArrayList<Map.Entry<Integer, Integer>>(hash.entrySet());
            Collections.sort(sortedListMap, byMapValues);
            for(int i=0;i<k;i++)
                list.add(sortedListMap.get(i).getKey());
            return list;
    }
}

思路二、使用堆 java中PriorityQueue就是使用堆的思想来维护一个优先级。 没什么好说的,看这里吧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档