347.TopK Frequent Elements
Given a non-empty array of integers, return the k most frequent elements.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2]
Example 2:
Input: nums = [1], k = 1 Output: [1]
public List<Integer> topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int n : nums) {
map.put(n, map.getOrDefault(n, 0) + 1);
}
PriorityQueue<Map.Entry<Integer, Integer>> minHeap = new PriorityQueue<>((o1, o2) -> o1.getValue().compareTo(o2.getValue()));
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (minHeap.size() != k) {
minHeap.offer(entry);
} else {
if (minHeap.peek().getValue() < entry.getValue()){
minHeap.poll();
minHeap.offer(entry);
}
}
}
List<Integer> res = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : minHeap) {
res.add(entry.getKey());
}
return res;
}
浙公网安备 33010602011771号