Lintcode550 Top K Frequent Words II 题解

【题目描述】

Find top k frequent words in realtime data stream.

Implement three methods for Topk Class:

1. TopK(k). The constructor.

2. add(word). Add a new word.

3. topk(). Get the current top k frequent words.

Notice: If two words have the same frequency, rank them by alphabet.

在实时数据流中找到最常使用的k个单词。

实现TopK类中的三个方法:

1. TopK(k), 构造方法

2. add(word), 增加一个新单词

3. topk(), 得到当前最常使用的k个单词

注意:如果两个单词有相同的使用频率, 按字母排序。

【题目链接】

www.lintcode.com/en/problem/top-k-frequent-words-ii/

【题目解析】

维护一个长度不大于K的数组vector< pair < int,string>>words,元素存放单词出现次数和单词。

构建set< string> cur存放words中的单词,map< string,int> all存放出现的所有单词和出现次数。在add操作中,对于每个出现的单词word,构建pair< int, string > temp,获取word已经出现的次数。

如果word出现在cur中,说明word的出现频率已经是前k大,在words中删除包含word的元素,在cur中删除word。将word的出现次数加一,利用二分查找,找到temp在words中的插入位置pos,如果words小于k,直接插入temp;否则,判断pos是否是words.end(),如果不是插入temp,并把末尾元素剔除,并更新cur的值。

【参考答案】

www.jiuzhang.com/solutions/top-k-frequent-words-ii/

你可能感兴趣的:(Lintcode550 Top K Frequent Words II 题解)