先贴出用了heap的做法,稍后要学会用桶排序来做。
public class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer> res = new LinkedList<>();
if (nums == null || nums.length == 0) {
return res;
}
Map<Integer, Integer> map = new HashMap<>();
for (int i: nums) {
if (map.containsKey(i)) {
map.put(i, map.get(i) + 1);
} else {
map.put(i, 0);
}
}
PriorityQueue<Pair> queue = new PriorityQueue<>(11, new Comparator<Pair>(){
@Override
public int compare(Pair a, Pair b) {
return a.count - b.count;
}
});
for (Map.Entry<Integer, Integer> entry: map.entrySet()) {
queue.offer(new Pair(entry.getKey(), entry.getValue()));
if (queue.size() > k) {
queue.poll();
}
}
while (!queue.isEmpty()) {
res.add(0, queue.poll().num);
}
return res;
}
class Pair{
int num;
int count;
public Pair (int n, int c) {
num = n;
count = c;
}
}
}