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

字符串出现次数的TopK问题

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

统计频率 遇到的问题

 //这个统计不了,因为putIfAbsent这个函数遇到重复的key会舍弃新插入的值
map.putIfAbsent(strings[i],map.getOrDefault(strings[i],0)+1);
//而put的策略是 覆盖掉旧值
 map.put(strings[i],map.getOrDefault(strings[i],0)+1);

步骤:

  1. 统计频率
  2. 构建最小堆,保证只能插入k个元素
  3. 输出堆顶,堆顶为最小值,需要倒序构建结果集
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
        String[][] strs = new String[k][2];
        if(strings.length == 0 || k == 0) return strs;
        //统计频率
        HashMap<String,Integer> map = new HashMap();
         for(int i=0;i<strings.length;i++){
          
            map.put(strings[i],map.getOrDefault(strings[i],0)+1);
     
        }
        Set<Map.Entry<String,Integer>> entr = map.entrySet();
        //构建小顶堆
        PriorityQueue<Map.Entry<String,Integer>> queue = new PriorityQueue<>((
            o1,o2) -> {
            int t = o1.getValue() - o2.getValue();
            if(t != 0) {
                return t;
            } else {
                return o2.getKey().compareTo(o1.getKey());
            }
        });
        //加入元素
        for(Map.Entry<String,Integer> i : entr) {
            queue.offer(i);
            if(queue.size() > k) {
                queue.poll();
            }
        }
        //倒序遍历,生成结果集
        for(int i = k - 1; i >= 0; i--) {
            Map.Entry<String,Integer> temp = queue.poll();
            strs[i][0] = temp.getKey();
            strs[i][1] = temp.getValue() + "";
        }
        return strs;
    }
}
全部评论

相关推荐

丿南烟丶:黑白模板吧,不要这样花哨的。 主要成就太空了,和获奖融在一起,写一两行就行了。 职业技能不要这样排,就传统的掌握精通什么什么然后举例补充的一些重要技术点。 自我介绍说实话也没啥用,可以删了。 把自己的两个项目方案细节补充上去,为什么这样设计,怎么设计,成果是什么按star法则来写 你要引导面试官来问你的技能和项目,你的获奖和自我介绍别人可能看都不看一眼或者不太在乎,重要的是展示你能干活的能力
点赞 评论 收藏
分享
算法丰川祥:实际就两个人给他投,它这么说好显得自己比较抢手
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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