問題は次のとおりです。文字列のリストと整数 k が与えられた場合、頻度に基づいて降順で最も頻繁に出現する上位 k 個の単語を返します。これは O(N) である必要があります。ここで、N は文字列のリストの長さです。
一般的な解決策は、(単語、頻度) をハッシュ テーブルに格納し、ハッシュ テーブルを頻度で並べ替え、上位 k 単語を出力することです。ただし、頻度によるソートには O(NlgN) かかるため、これは O(N) ではありません。
O(N) ソリューションが実際に存在するかどうか疑問に思っています。k 番目に出現頻度の高い単語を取得し、残りの頻度を並べ替える場所をクイック選択することを考えましたが、それは O(N + klgk) であり、k が N の場合でも O(NlgN) です。