我希望在 Java 中创建一个最大堆,但无法理解这一点。谁可以给我解释一下这个
问题:给定一个字符串,根据字符的频率按降序对其进行排序。
输入=“树”
预期输出:“eetr”
所以我需要一个使用优先队列的最大堆,但我不明白这段代码是如何工作的。优先队列的声明是如何工作的?
public class Solution {
public String frequencySort(String s) {
Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray())
map.put(c, map.getOrDefault(c, 0) + 1);
PriorityQueue<Map.Entry<Character, Integer>> pq = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
pq.addAll(map.entrySet());
StringBuilder sb = new StringBuilder();
while (!pq.isEmpty()) {
Map.Entry e = pq.poll();
for (int i = 0; i < (int)e.getValue(); i++)
sb.append(e.getKey());
}
return sb.toString();
}
}
所以想知道这是怎么回事
new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
事情适用于制作优先队列。