这个题还挺有意思的,很多人都会想到先用字典计数,然后利用对计数排序来做。
我也是这个思路,不过我更倾向于插入排序,效率更改,内存更低。
class Solution { public: /** * return topK string * @param strings string字符串vector strings * @param k int整型 the k * @return string字符串vector<vector<>> */ vector<vector<string> > topKstrings(vector<string>& strings, int k) { // write code here map<string,int> mp; vector<pair<string, int>> list; vector<vector<string> > res; for(string s : strings){ mp[s]++; } for (auto it = mp.begin(); it != mp.end(); ++it) { pair<string, int> val = {it->first,it->second}; insertTopK(list, k,val); } for(int i=0;i<k;i++){ string count = to_string(list[i].second); vector<string> p = {list[i].first,count}; res.push_back(p); } return res; } void insertTopK(vector<pair<string, int>> &list,int k,pair<string, int> &val){ bool flag = false; for(int i=0;i<list.size();i++){ if(list[i].second < val.second){ list.insert(list.begin()+i, val); flag = true; break; } } if(!flag){ list.insert(list.end(), val); } if(list.size() > k){ list.erase(list.end()); } } };