给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数

Posted 木子丿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数相关的知识,希望对你有一定的参考价值。

import java.util.*;
public class Solution {
    public String[][] topKstrings (String[] strings, int k) {
        if(strings==null || strings.length==0){
            return null;
        }  
        HashMap<String,Integer> map = new HashMap();
        for(String s : strings){

            map.put(s,map.getOrDefault(s,0)+1);
        }
        PriorityQueue<Node> minHeap = new PriorityQueue();
        for(Map.Entry<String,Integer> entrySet : map.entrySet()){
            Node node = new Node(entrySet.getKey(),entrySet.getValue());
            if(minHeap.size() < k){
                minHeap.add(node);
            }else{

                if(minHeap.peek().compareTo(node) < 0){
                    minHeap.poll();
                    minHeap.add(node);
                }
            }
        }
        
        String[][] result = new String[k][2];
        for(int i=k-1;i>=0;i--){
            Node node = minHeap.poll();
            result[i][0] = node.name;
            result[i][1] = String.valueOf(node.count); 
        }
        return result;
    }
    
    class Node implements Comparable<Node>{
        
        String name;
  
        int count;
        
        public Node(String name,int count){
            this.name = name;
            this.count = count;
        }
        
        @Override
        public int compareTo(Node node){
            if(this.count > node.count){
                return 1;
            }else if(this.count < node.count){
                return -1;
            }else{
                return node.name.compareTo(this.name);
            }
        }
    }
}

以上是关于给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数的主要内容,如果未能解决你的问题,请参考以下文章

字符串出现次数的TopK问题(NC97/考察次数Top49/难度中等)

字典自定义排序

前K个高频元素

OJ | 力扣347输出前 K 个高频元素

实现一个函数, // 判断一个给定整数数组中是否存在某两个元素之和恰好等于一个给定值 k, // 存在则返回 true,否则返回 false。

寻找第K大(NC88/考察次数Top7/难度中等)