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) {
//记录字符出现次数
HashMap
for (int i = 0; i < strings.length; i++) {
if (map.containsKey(strings[i])) {
map.put(strings[i], map.get(strings[i]) + 1);
} else {
map.put(strings[i], 1);
}
}
//建立小根堆,自定义比较器(次数值value相同,比较key的字典序,不相同直接比较次数值value)
PriorityQueue
(o1, o2) -> o1.getValue().equals(o2.getValue()) ? o2.getKey().compareTo(o1.getKey()) : o1.getValue() - o2.getValue());
//维护size为k的小根堆
for (Map.Entry
if (pq.size() < k) {
pq.offer(m);
//大于堆顶元素插入
} else if ((m.getValue().equals(pq.peek().getValue()) ? pq.peek().getKey().compareTo(m.getKey()) : m.getValue() - pq.peek().getValue()) > 0) {
pq.poll();
pq.offer(m);
}
}
//取出堆中元素,从后向前放置
String[][] res = new String[k][2];
for (int i = k - 1; i >= 0; i--) {
Map.Entry
res[i][0] = entry.getKey();
res[i][1] = String.valueOf(entry.getValue());
}
return res;
}
}