美文网首页
每天一道算法题19

每天一道算法题19

作者: 雨打空城 | 来源:发表于2022-01-28 09:57 被阅读0次

    给定一个由字符串组成的数组String[] strs, 给定一个正数K,返回词频最大的前K个字符串,假设答案是唯一的

    解答:
    构建一个小跟堆,大小就是K。
    比如当前词频为
    a 1
    b 1
    c 2
    d 2

    将a,b 压入堆,然后此时c,发现小根堆的堆顶的词频只有1,所以弹出,将c压入,然后到d,发现d的词频又比队顶a的词频高,所以又弹出堆顶,将d入堆

    public class Node {
        public String str;
        public int times;
    
        public Node(String s, int t) {
            this.str = s;
            this.times = t;
        }
    }
    
    public class Comparator implements Comparator<Node> {
        @Override
        public int compare(Node o1, Node o2) {
            return o1.times - o2.times;
        }
    }
    
    public static void printTopKAndRank(String[] arr, int topK) {
        if (arr == null || arr.length == 0 || topK < 1 || topK > arr.length) {
            return;
        }
    
        HashMap<String, Integer>map = new HashMap<>();
        for (String st : arr) {
            if (!map.contains(str)) {
                map.put(str, 1);
            } else {
                map.put(str, map.get(str) + 1);
            }
        }
    
        PriorityQueue heap = new PriorityQueue<>(new NodeComparator());
        for(Entry<String, Integer> node : map.entrySet()) {
            Node cur = new Node(node.getKey(), node.getValue());
            if (heap.size() < topK) {
                heap.add(cur);
            } else {
                if (heap.peek().times < cur.times) {
                    heap.poll();
                    heap.add(cur);
                }
            }
        }
    
        while(!heap.isEmpty()) {
            System.out.print(heap.peek().str);
        }
    }

    相关文章

      网友评论

          本文标题:每天一道算法题19

          本文链接:https://www.haomeiwen.com/subject/fbgzhrtx.html