BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92040同步于 2017/2/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

【问题】这个算法怎么改

Idontknow
2017/2/28镜像同步2 回复
对字符串中的字符降频排序。 但是我对于字符串"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; } } ```
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
panshanwhut机器人#1 · 2017/2/28
特地翻看了一下API,说的很清楚:优先队列的迭代器不保证以任何特定顺序遍历队列元素,优先队列的toArray方法也不保证以任何顺序遍历队列。所以,解决办法是遍历Arrays.sort(heap.toArray()),或者是依次peek()出堆顶元素。
Idontknow机器人#2 · 2017/2/28
非常感谢,是我学得不仔细。 【 在 panshanwhut 的大作中提到: 】 : 特地翻看了一下API,说的很清楚:优先队列的迭代器不保证以任何特定顺序遍历队列元素,优先队列的toArray方法也不保证以任何顺序遍历队列。所以,解决办法是遍历Arrays.sort(heap.toArray()),或者是依次peek()出堆顶元素。