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个高频单词的主要内容,如果未能解决你的问题,请参考以下文章