题解 | #字符串出现次数的TopK问题#

字符串出现次数的TopK问题

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

import java.util.*;


public class Solution {
    /**
     * return topK string
     * @param strings string字符串一维数组 strings
     * @param k int整型 the k
     * @return string字符串二维数组
     */
    // 1.使用map存放字符串出现的次数
    // 2.使用优先级队列存放出现次数最多的k个字符串  
    //    2.1 常规的就是小顶堆,队列头部是最小的 offer和poll都是顶部元素
    public String[][] topKstrings (String[] strings, int k) {
        // write code here
        HashMap<String,Integer> map = new HashMap<>();
        for (String str : strings) {
            map.put(str, map.getOrDefault(str, 0) + 1);
        }

        PriorityQueue<String> queue = new PriorityQueue<>(new Comparator<String>(){
            @Override
            public int compare(String o1,String o2){
                if (map.get(o1).equals(map.get(o2))){
                    return o2.compareTo(o1);
                }else {
                    return map.get(o1) - map.get(o2);
                }
            }
        });


        for (Map.Entry<String,Integer> entry : map.entrySet()) {
            // 
            queue.offer(entry.getKey());

            if (queue.size() > k){
                queue.poll();
            }
        }
        String[][] res = new String[k][2];
        for (int i = 0; i < k; i++) {
            String cur = queue.poll();
            res[k-1-i] = new String[]{ cur,String.valueOf(map.get(cur)) } ;
        }
        return res;

    }
}
全部评论

相关推荐

投递京东等公司10个岗位
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
球球别拷打俺了:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-17 14:06
点赞 评论 收藏
分享
08-05 11:21
已编辑
合肥工业大学 前端工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务