[Array & Hash] Top K Frequent Element

김예인·2023년 11월 21일
0

알고리즘 문제풀이

목록 보기
7/12

문제

nums 라는 integer 배열이 주어질 때, 빈도수가 가장 많은 요소를 k 개 담아 배열을 반환하라.


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 int[] topKFrequent(int[] nums, int k) {

         // 1. 해시맵을 만든다
        Map<Integer, Integer> map = new HashMap<>();

        // 2. nums 배열을 순회하며, 해당 요소가 맵에 존재하는 키면 value 를 카운트
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        // 4. 해시맵을 value 기준으로 내림차순 정렬 (EntrySet 으로 변환하여 정렬하기, comparator 사용, 람다 함수 사용)
        List<Map.Entry<Integer, Integer>> entryList = new ArrayList<>(map.entrySet());
        entryList.sort(Map.Entry.<Integer, Integer>comparingByValue().reversed()); // value 를 기준으로 오름차순 정렬

        // 5. 앞에서부터 k 개 만큼의 key 배열을 반환
        int[] result = new int[k];

        for (int i = 0; i < k; i++) {
            result[i] = entryList.get(i).getKey();
        }

        return result;

    }
  • 각 요소의 빈도를 계산 -> 빈도+요소 조합으로 내림차순 정렬 -> 앞에서부터 K개 만큼 꺼내 반환
profile
백엔드 개발자 김예인입니다.

0개의 댓글