説明
<単語、FREQ>ペアのリストからビルドしようとします。各ノードの上位10セーブ。
例
例1
Input:
<"abc", 2>
<"ac", 4>
<"ab", 9>
Output:<a[9,4,2]<b[9,2]<c[2]<>>c[4]<>>>
Explanation:
Root
/
a(9,4,2)
/ \
b(9,2) c(4)
/
c(2)
例2
Input: <"a", 10> <"c", 41> <"b", 50> <"abc", 5> Output: <a[10,5]<b[5]<c[5]<>>>b[50]<>c[41]<>>
その後、再び第1走査数、および解決するために、ツリーを再構築:アイデア
/ ** * TrieNodeの定義: *パブリッククラスTrieNode { *公共NavigableMapの<文字、TrieNode>子供。 *公共の一覧<整数> TOP10。 *公共TrieNode(){ *子どもたち=新TreeMapを<文字、TrieNode>(); * TOP10 =新しいのArrayList <Integer型>(); *} *} * / publicクラスTrieService { プライベートTrieNodeルート= NULL; パブリックTrieService(){ ルート=新しいTrieNode()。 } 公共TrieNode getRoot(){ トライルートの//戻りルート、および // lintcodeツリー構造体を印刷します。 ルートを返します。 } // @paramの単語列 // @param周波数の整数 ます。public void挿入(文字列の単語、int型の周波数){ //ここにタラを書く TrieNode CUR =ルート。 INT、N = word.length()。 以下のために(INT I 0 =、I <N; ++ I){ 文字c = word.charAt(I)。 (!cur.children.containsKey(C))であれば cur.children.put(C、新しいTrieNode()); CUR = cur.children.get(C); addFrequency(cur.top10、周波数)。 } } 公共ボイドaddFrequency(一覧<整数> TOP10、INT周波数){ top10.add(周波数)。 INT、N = top10.size()。 INTインデックス= N - 1。 一方、(指数> 0){ IF(top10.get(インデックス)> top10.get(インデックス- 1)){ int型TEMP1 = top10.get(インデックス) INT TEMP2 = top10.get(インデックス- 1)。 top10.set(インデックス、TEMP2)。 top10.set(インデックス- 1、TEMP1)。 索引- = 1; }他に ブレーク。 } (N> 10)場合 top10.remove(N - 1)。 } }