文章标题
来源:互联网 发布:sql server 2016 sp1 编辑:程序博客网 时间:2024/05/31 18:55
Given a non-empty list of words, return the k most frequent elements.Your answer should be sorted by frequency from highest to lowest. If two words have the same frequency, then the word with the lower alphabetical order comes first.Example 1:Input: ["i", "love", "leetcode", "i", "love", "coding"], k = 2Output: ["i", "love"]Explanation: "i" and "love" are the two most frequent words. Note that "i" comes before "love" due to a lower alphabetical order.Example 2:Input: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4Output: ["the", "is", "sunny", "day"]Explanation: "the", "is", "sunny" and "day" are the four most frequent words, with the number of occurrence being 4, 3, 2 and 1 respectively.Note:You may assume k is always valid, 1 ≤ k ≤ number of unique elements.Input words contain only lowercase letters.
本题用trie树即可解决,但是还是需要多思考。
typedef struct TrieNode{ int freq; int count;/*flag this is a complete word*/ struct TrieNode * next[26];}TrieNode,*Trie;TrieNode* createTrieNode(){ TrieNode* node = (TrieNode *)malloc(sizeof(TrieNode)); node->freq = 0; node->count = 0; memset(node->next , 0 , sizeof(node->next)); // 初始化为空指针 return node;}int insertTrieNode(TrieNode *root,const char *word){ TrieNode * node = root; const char *p = word; int key = 0; if(root == NULL||p == NULL || strlen(word) == 0){ return -1; } while(*p){ key = *p - 'a'; if(key < 0 || key >= 26){ return -1; } if(node->next[key] == NULL){ node->next[key] = createTrieNode(); } node = node->next[key]; node->freq += 1; ++p; } node->count += 1; return 0;}int searchTrie(TrieNode *root,const char *word){ TrieNode * node = root; const char *p = word; int key = 0; if(root == NULL||p == NULL || strlen(word) == 0){ return -1; } while(*p){ key = *p-'a'; if(key < 0 || key >= 26){ return -1; } if(node->next[key] == NULL){ return 0; } node = node->next[key]; ++p; } return node->count;}int cmp(const pair<string, int>& x, const pair<string, int>& y) { return x.second > y.second; } void sortMapByValue(map<string, int>& tMap,vector<pair<string, int> >& tVector) { for (map<string, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++) tVector.push_back(make_pair(curr->first, curr->second)); sort(tVector.begin(), tVector.end(), cmp); } class Solution {public: vector<string> topKFrequent(vector<string>& words, int k) { TrieNode * root = createTrieNode(); map<string,int> wordCount; vector<pair<string,int>> wordVec; vector<string> result; for(int i = 0;i < words.size();++i){ insertTrieNode(root,words[i].c_str()); } for(int i = 0;i < words.size();++i){ int cnt = searchTrie(root,words[i].c_str()); wordCount.insert(pair<string, int>(words[i],cnt)); } map<string,int>::iterator it; it = wordCount.begin(); while(it!=wordCount.end()){ cout<<it->first<<":"<<it->second<<endl; it++; } sortMapByValue(wordCount,wordVec); for(int i = 0;i < k; ++i){ result.push_back(wordVec[i].first); } return result; }};
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- springboot初体验
- 笨办法学Python习题2-注释和#号
- 该怎么写博客,博客征程的正确打开方式
- 每个开发人员都应该知道的10个Linux命令
- Collection
- 文章标题
- PAT (Basic Level) Practise (中文)1013. 数素数 (20)
- k-近邻算法(一)
- java日常学习:构造函数练习
- 更新不要停 11.1号苹果带来iOS 11.1正式版
- 关于MPI补充之通信篇
- [LeetCode-Algorithms-20] "Valid Parentheses" (2017.11.1-WEEK9)
- Scrollview嵌套listVIew冲突问题的解决
- 005_LeetCode_5 Longest Palindromic Substring 题解