[PythonでLeetCode] 692(M)トップK頻出単語高周波ワードK前

トピック:

https://leetcode-cn.com/problems/top-k-frequent-words/

言葉の非空のリストに、kは単語が戻る前に、最大で表示された回数です。
答えは、周波数ワードが表示され降順にソート返されるべきです。同じ単語が異なる周波数を有する場合には、アルファベット順にソート。

例1:

入力:[ "I"、 "愛 "、 "leetcode"、 "I"、 "愛"、 "コーディング"]で、k = 2
出力:[ "I"、 "愛 "]
分析: "I"と「愛二つの言葉は、最も頻繁に現れるよう」、2回です。
注、「I」「愛」の前にアルファベット順でいます。
 
例2:

入力:[ ""、 "日 = 4、K"、 "ある"、 "晴れ"、 ""、 ""、 ""、 "晴れ"、 "である"とは、 "ある"]
出力:[ 、「ある」「」、 「晴れ」、「日」]
解決:「」、「ある」 「晴れ」、 および「日」4つの単語が最も頻繁に表示され、
出現数は4、3でした、 2と1。

注意:

Kは、全RMS、1つの≤K≤要素の集合数を想定しています。
小文字で入力された単語。

問題解決のためのアイデア

  • Pythonは最小ヒープheapqを実現しています
  • heapq.nlargest heapq関数)(反復可能[キー]、N)がトップkを取り
  • 機能上の3番目の引数は、マルチパラメータが比較CASCADEサポート
  • ()、周波数下降と上昇の名前を満たすことができない直接nlargest
  • )(数、及びその後nsmallest使用する変換 - トリック前周波数を追加することです

コード

class Solution:
    def topKFrequent(self, words: List[str], k: int) -> List[str]:
        # - statistic word frequency
        freq_dict = {}
        for w in words:
            if w not in freq_dict:
                freq_dict[w] = 0
            freq_dict[w] += 1

        # - top k, sort by -freq and word
        return heapq.nsmallest(k, freq_dict, key=lambda w:(-freq_dict[w], w))

ご注意ください

  • heapqは、厳密に言えば、日和見属し使用し、必要が捜査の目的を達成するために、独自のnsmallest()を実装します
  • より一般的なアプローチは、上位k個の並べ替えを達成するために、基準クイックステップを分割することです

おすすめ

転載: www.cnblogs.com/journeyonmyway/p/12543887.html
おすすめ