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

字符串出现次数的TopK问题

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

package suanfa.string;

import java.util.*;

public class TopKstrings {

public static void main(String[] args) {

    String[] s = new String[]{"a", "b", "a"};

    List<MyNode> list = topKstrings(s, 2);

}

public static List<MyNode> topKstrings(String[] strings, int k) {

    Map<String, Integer> map = new HashMap<>();

    for (int i = 0; i < strings.length; i++) {
        map.put(strings[i], map.getOrDefault(strings[i], 0) + 1);
    }


    PriorityQueue<MyNode> queue = new PriorityQueue<>(Comparator.comparingInt(o -> o.num));

    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        MyNode node = new MyNode(entry.getKey(), entry.getValue());
        if (queue.size() < k) {
            queue.offer(node);
        } else {
            MyNode tmp = queue.peek();
            if (tmp.num < node.num) {
                queue.poll();
                queue.offer(node);
            }
        }
    }
    List<MyNode> list = new ArrayList<>();

    while (queue.size() > 0) {
        list.add(queue.poll());
    }
    return list;
}


static class MyNode {
    String val;
    Integer num;

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

}

全部评论

相关推荐

dian3b:挺妙的,如果上纲上线显得不合人心,但是这样以来既能监督适当摸鱼,也有一定的人文关怀。
摸鱼被leader发现了...
点赞 评论 收藏
分享
牛客85811352...:1希音不知道算不算大厂 2完全符合,过得很舒服, 3确实只有杂活 领导找我续签到明年3、4月我要继续吗。主要是边实习边秋招这段时间还是有点累
什么是优秀的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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