问题是:给定一个字符串列表和一个整数 k,根据频率降序返回前 k 个最常出现的单词。这必须在 O(N) 中完成,其中 N 是字符串列表的长度。
流行的解决方案是将(单词,频率)存储在一个哈希表中,按照频率对哈希表进行排序,输出前k个单词。然而,这不是 O(N),因为按频率排序需要 O(NlgN)。
我想知道是否确实存在 O(N) 解决方案。我考虑过快速选择在哪里获得第 k 个最常出现的单词并对剩余的频率进行排序,但是当 k 是 N 时,这将是 O(N + klgk),它仍然是 O(NlgN)。