返回信息流对字符串中的字符降频排序。
但是我对于字符串"raaeaedere"打印出来的是"eeeeaaadrr",本应该是"eeeeaaarrd"。这种情况下应该怎么改?
```
String s = "raaeaedere";
PriorityQueue<Tuple> heap = new PriorityQueue<>();
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!map.containsKey(c)) {
map.put(c, 0);
}
map.put(c, map.get(c) + 1);
}
for (Character c : map.keySet()) {
heap.add(new Tuple(c, map.get(c)));
}
for (Tuple t : heap) {
for (int i = 0; i < map.get(t.c); i++) {
System.out.print(t.c); //eeeeaaadrr
}
}
```
```
class Tuple implements Comparable<Tuple>{
private char c;
private int cnt;
public Tuple(char c, int cnt) {
this.c = c;
this.cnt = cnt;
}
@Override
public int compareTo(Tuple o) {
return o.cnt - this.cnt;
}
}
```
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92040同步于 2017/2/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】这个算法怎么改
Idontknow
2017/2/28镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
特地翻看了一下API,说的很清楚:优先队列的迭代器不保证以任何特定顺序遍历队列元素,优先队列的toArray方法也不保证以任何顺序遍历队列。所以,解决办法是遍历Arrays.sort(heap.toArray()),或者是依次peek()出堆顶元素。
非常感谢,是我学得不仔细。
【 在 panshanwhut 的大作中提到: 】
: 特地翻看了一下API,说的很清楚:优先队列的迭代器不保证以任何特定顺序遍历队列元素,优先队列的toArray方法也不保证以任何顺序遍历队列。所以,解决办法是遍历Arrays.sort(heap.toArray()),或者是依次peek()出堆顶元素。