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