Я пытаюсь создать maxheap символов.Сначала сортируйте по частоте, если частота одинакова, затем сортируйте в алфавитном порядке.
Map<Character, Integer> map = new HashMap<>();
for(int i = 0; i < n; i++) {
char c = s.charAt(i);
map.put(c, map.getOrDefault(c, 0) + 1);
}
Queue<Character> pq = new PriorityQueue<>(new Comparator<Character>(){
@Override
public int compare(Character c1, Character c2){
if(map.get(c1) == map.get(c2)){
return c1 < c2 ? -1 : (c1 == c2 ? 0 : 1);
//return (char)c1 - (char)c2; same output
}
return map.get(c2) - map.get(c1);
}
});
for(char key : map.keySet()){
pq.offer(key);
System.out.println(key + " has freq " + map.get(key));
}
while(!pq.isEmpty()) {
System.out.print(pq.poll() + " ");
}
Я поместил 26 букв в этот maxheap, и каждая буква имеет одинаковую частоту 5000.
Но порядок вывода'a', 'z', 'y', 'x' ...., 'c', 'b'.
при частоте каждогоchar 5, порядок правильный.
Я не понимаю, почему выход с частотой 5000 такой.Как я могу получить правильный заказ?