Computer Science/Java
[Java 101] 347. Top K Frequent Elements with HashMap as a counter, PriorityQueue,
focalpoint
2023. 2. 14. 04:22
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> counter = new HashMap<>();
for (int num: nums) {
counter.put(num, counter.getOrDefault(num, 0) + 1);
}
Comparator<List<Integer>> comparator = (list1, list2) -> {
for (int i = 0; i < list1.size(); i++) {
int value = list1.get(i) - list2.get(i);
if (value != 0)
return value;
}
return 0;
};
Queue<List<Integer>> pq = new PriorityQueue<>(comparator);
for (var key: counter.keySet()) {
pq.add(List.of(counter.get(key), key));
if (pq.size() > k) pq.poll();
}
return pq.stream().map(x -> x.get(1)).mapToInt(i -> i).toArray();
}
}
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> counter = new HashMap<>();
for (int num: nums) {
counter.put(num, counter.getOrDefault(num, 0) + 1);
}
Queue<Integer> pq = new PriorityQueue<>(
(num1, num2) -> counter.get(num1) - counter.get(num2)
);
for (var key: counter.keySet()) {
pq.add(key);
if (pq.size() > k) pq.poll();
}
return pq.stream().mapToInt(i -> i).toArray();
}
}