Scribbling

[Java 101] 347. Top K Frequent Elements with HashMap as a counter, PriorityQueue, 본문

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();
    }
}