692. 前K个高频单词

Posted lgz0921

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了692. 前K个高频单词相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/top-k-frequent-words/

思路:用map标记字符串出现的次数,用优先队列筛出前k大的(排序方式为:字典序大的在前,个数小的在前。这样排序方便筛出前k大的,并且是字典序小的前k大)。最后用list来存一下排序的结果(因为堆的底层不是排好序的,只有poll()一遍才可以)。记得反转list,因为排序的方式正好与题目要求相反。

上代码:
 

class Solution {
    fun topKFrequent(words: Array<String>, k: Int): List<String> {
        val map = words.groupBy { it }.map { it.key to it.value.size }.toMap()
        val que = PriorityQueue<String> { x1, x2 ->
            val value1 = map[x1]
            val value2 = map[x2]
            if (value1 == value2) {
                x2.compareTo(x1)
            } else {
                value1!! - value2!!
            }
        }
        map.forEach { (key, _) ->
            que.add(key)
            if (que.size > k) {
                que.poll()
            }
        }
        val list = ArrayList<String>()
        while (que.isNotEmpty()) {
            list.add(que.poll())
        }
        return list.reversed()
    }
}

 

以上是关于692. 前K个高频单词的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:692. 前K个高频单词

leetcode692. 前K个高频单词

leetcode 692. 前K个高频单词

力扣练习006---前K个高频单词(692)

692. 前K个高频单词 (堆)

692. 前K个高频单词