https://leetcode.com/problems/top-k-frequent-elements/description/

코드설명

아이디어(Idea) + 해시맵(HashMap) + 우선순위큐(PriorityQueue) 을 활용합니다.

 

방법은, 

1. HashMap으로 각 숫자별 Frequency를 구합니다.

2. 각 Frequency별로 정렬을 하거나 배열을 활용하여서 값을 만들고 Frequency가 높은순서대로 k개 뽑습니다. (배열 활용시 nums.length개의 빈도수만 가능하다는 점을 활용합니다.)

코드

정답코드1입니다.

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer, Integer> hashmap = new HashMap<>();
        for(int v : nums){
            hashmap.put(v, hashmap.getOrDefault(v, 0) + 1);
        }

        List<Integer>[] list = new ArrayList[nums.length + 1];
        for(int i=0; i<=nums.length; i++){
            list[i] = new ArrayList<Integer>();
        }
        for(Map.Entry<Integer, Integer> entrySet : hashmap.entrySet()){
            list[entrySet.getValue()].add(entrySet.getKey());
        }

        int[] answer = new int[k];
        int idx = 0;
        for(int i=nums.length; i>=0; i--){
            List<Integer> connected = list[i];
            for(int j=0; j<connected.size(); j++){
                answer[idx++] = connected.get(j);
                if(idx == k) return answer;
            }
        }

        return answer;
    }
}

 

PriorityQueue와 Comparator를 활용한 정답코드2입니다.

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer, Integer> hashmap = new HashMap<>();
        for(int i=0; i<nums.length; i++){
            hashmap.put(nums[i], hashmap.getOrDefault(nums[i], 0) + 1);
        }

        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>(){
            @Override
            public int compare(Integer a, Integer b){
                return Integer.compare(hashmap.get(b), hashmap.get(a));
            }
        });

        for(Map.Entry<Integer, Integer> entrySet : hashmap.entrySet()){
            pq.offer(entrySet.getKey());
        }

        int[] answer = new int[k];
        int idx = 0;
        for(int i=0; i<k; i++){
            answer[idx++] = pq.poll();
        }

        return answer;
    }
}

 

+ Recent posts