小米OJ 13 出现频率最高的前 K 个元素

描述:

有一个不为空且仅包含正整数的数组,找出其中出现频率最高的前 K 个数,时间复杂度必须在 O(n log n) 以内。

输入

一行数据包括两部分,一个正整数数组(数字间 ',' 分隔)和一个正整数 K (1 ≤ K ≤ 数组长度),数组和 K 之间有一个空格。

输出

输出包含前 K 个出现频率最高的数(出现频率相同时,较小的数在前),用 ', ' 分隔,保证升序排列。

输入样例

1,1,1,2,2,3 2

输出样例

1,2

思路

先利用map查找方便的特点统计每个数出现的次数,然后再使用Comparator对map排序。

代码

public class test {

    public static void main(String[] args){
        String line="1,1,1,2,2,3 2";
        String[] str=line.split(" ");
        System.out.println(test13(str[0].split(","),Integer.parseInt(str[1])));
    }
    public static String test13(String[] nums,int k){
        Map map=new HashMap<>();
        for(String num:nums){
            if(map.containsKey(num)){
                map.put(num,map.get(num)+1);
            }else {
                map.put(num,1);
            }
        }
        List> list=new ArrayList(map.entrySet());
        Collections.sort(list, new Comparator>(){
            //降序
            @Override
            public int compare(Map.Entry o1,
                               Map.Entry o2) {
                return o2.getValue()-o1.getValue();
            }
        });
        int resultLenth=(map.size()

你可能感兴趣的:(小米OJ 13 出现频率最高的前 K 个元素)