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

字符串出现次数的TopK问题

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

#define PSI pair<string,int>
class mycompare{
public:
    //小顶堆:使用的是greater比较方法,也就是谁的优先级大,就返回谁
    //那么这里首先频率大的就是greater,其次字典序小的就是greater。
    //所以我们这里使用的compare,就是根据这个greater思想来写的
    bool operator()(const PSI &lhs,const PSI &rhs){
        if(lhs.second > rhs.second)return true;
        if(lhs.second == rhs.second)return lhs.first < rhs.first;
        return false;
    }
};
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
        unordered_map<string,int> counts;
        for(auto &element : strings){
            ++counts[element];
        }
        priority_queue<PSI,vector<PSI>,mycompare> pq;
        for(auto &element : counts){
            if(pq.size() < k)pq.push(element);
            else if(mycompare()(element,pq.top())){
                pq.pop();pq.push(element);
            }
        }
        vector<vector<string>> ans(k);
        int index = 0;
        while(!pq.empty()){
            auto current = pq.top();pq.pop();
            ans[--k] = {current.first,to_string(current.second)};
        }
        return ans;
    }
};
全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务