美文网首页
找出数组中出现次数最多的前k个元素

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

作者: mrjunwang | 来源:发表于2018-08-07 09:21 被阅读0次

给定一个非空的整数数组,返回其中出现频率前 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为降序

相关文章

网友评论

      本文标题:找出数组中出现次数最多的前k个元素

      本文链接:https://www.haomeiwen.com/subject/wfcovftx.html