出现次数的topk问题

出现次数的TopK问题

https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee?tpId=117&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

public String[][] topKstrings (String[] strings, int k) {
        // write code here
        Map<String,Integer> map = new HashMap<>();
        for(String s:strings){
            int num = map.getOrDefault(s,0);
            map.put(s,num+1);
        }
        PriorityQueue<String> pQueue = new PriorityQueue<String>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int temp = map.get(o2)-map.get(o1);//大顶堆
                return temp==0?o1.compareTo(o2):temp;
            }
        });

        Set<String> set = map.keySet();
        for (String s:set){
            pQueue.add(s);
        }
        String[][] res = new String[Math.min(pQueue.size(),k)][2];
        int i=0;
        while (pQueue.size()>0 && i<k){
            String ss = pQueue.poll();
            res[i][0] = ss;
            res[i][1] = map.get(ss)+"";
            i++;
        }
        return res;
    }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务