[leetcode 347] Top K Frequent Elements
347. Top K Frequent Elements
해결 과정
HashMap
에 주어진 nums
의 <값, 등장 횟수> 를 저장한다.
등장 횟수가 많은 순서대로 내림차순 정렬 시킨 후,
상위 k를 IntArray
에 순서대로 담아서 반환한다.
코드
fun topKFrequent(nums: IntArray, k: Int): IntArray {
val map = hashMapOf<Int, Int>()
val result = IntArray(k)
nums.forEach { num ->
if(map.contains(num)) {
map.put(num, map[num]!! + 1)
} else {
map.put(num, 1)
}
}
// 우선순위큐 (value 내림차순)
val pq = PriorityQueue<Map.Entry<Int, Int>> { map1, map2 ->
map2.value - map1.value
}
pq.addAll(map.entries)
for(i in 0 until k) {
result[i] = pq.poll().key
}
return result
}
배운 점
- Collection 정렬에
우선순위큐(Priority Qeue)
를 사용할 수 있다.- add 되는 순서와 무관하게 정해놓은 규칙에 따라 우선순위를 선정하고 우선순위가 높은 순서대로 데이터가 out 된다.
- add(), peek(), poll()
- 내림차순: Collections.reverseOrder()
Leave a comment