题解 | #字符串出现次数的TopK问题#

字符串出现次数的TopK问题

http://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee

这个题还挺有意思的,很多人都会想到先用字典计数,然后利用对计数排序来做。
我也是这个思路,不过我更倾向于插入排序,效率更改,内存更低。

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());
         }
     }
};


全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务