出现次数的 TopK 问题

出现次数的TopK问题

http://www.nowcoder.com/questionTerminal/fd711bdfa0e840b381d7e1b82183b3ee

Top K 问题首先想到堆,这道题还好定制一个比较器 用 PriorityQueue 就可以了,不需要动态调整堆结构。所以不需要手写堆逻辑
哈哈偷了个懒,其实建议还是自己实现一个堆比较扎实能加深一下印象。

import java.util.*;


public class Solution {
    /**
     * return topK string
     * @param strings string字符串一维数组 strings
     * @param k int整型 the k
     * @return string字符串二维数组
     */
     public  String[][] topKstrings (String[] strings, int k) {
        // write code here

        PriorityQueue<MyNode> queue=new PriorityQueue<>(new MyComparator());

        HashMap<String,Integer> map=new HashMap<>(16);
        for (int i=0;i<strings.length;i++){
            if (map.containsKey(strings[i])){
                map.put(strings[i],map.get(strings[i])+1);
            }else {
                map.put(strings[i],1);
            }
        }
        //入堆
        for (Map.Entry<String,Integer> entry:map.entrySet()){
            queue.add(new MyNode(entry.getKey(),entry.getValue()));
        }
        String[][] result=new String[k][2];
        int j=0;
        while (j<k&&!queue.isEmpty()){
            MyNode node=queue.poll();
            result[j][0]=node.val;
            result[j++][1]= String.valueOf(node.num);
        }
        return result;

    }

    class MyNode{
        String val;
        int num;
        MyNode(String val,int num){
            this.num=num;
            this.val=val;
        }
    }

    class MyComparator implements Comparator<MyNode> {

        @Override
        public int compare(MyNode o1, MyNode o2) {
            if (o1.num==o2.num){
                //字典序小的在前 所以 o1 比 o2
                return o1.val.compareTo(o2.val);
            }else {
                //数量大的在前所以 o2 - o1
                return o2.num-o1.num;
            }

        }
    }
}
全部评论
你这直接干一个大顶堆收集所有(time大的在前,相等时候字典序小的在前),但是一般收集最大k用小堆(新进来的与k个里的最小堆顶比较,如果大则替换,收集完就是最大的k个了这样比较就是time小的在前,相等时候字典序大的在前)
点赞 回复 分享
发布于 2021-03-25 17:02
MaxHeap是NlogN吧 得minHeap才能NLogK
点赞 回复 分享
发布于 2022-01-08 14:50

相关推荐

贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
8
1
分享
牛客网
牛客企业服务