[leetcode 347] Top K Frequent Elements

347. Top K Frequent Elements

https://leetcode.com/problems/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