出现次数的topk问题
出现次数的TopK问题
https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee?tpId=117&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
public String[][] topKstrings (String[] strings, int k) {
// write code here
Map<String,Integer> map = new HashMap<>();
for(String s:strings){
int num = map.getOrDefault(s,0);
map.put(s,num+1);
}
PriorityQueue<String> pQueue = new PriorityQueue<String>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int temp = map.get(o2)-map.get(o1);//大顶堆
return temp==0?o1.compareTo(o2):temp;
}
});
Set<String> set = map.keySet();
for (String s:set){
pQueue.add(s);
}
String[][] res = new String[Math.min(pQueue.size(),k)][2];
int i=0;
while (pQueue.size()>0 && i<k){
String ss = pQueue.poll();
res[i][0] = ss;
res[i][1] = map.get(ss)+"";
i++;
}
return res;
}