30 Day Challenge Day 16 | Leetcode 692. Top K Frequent Words

题解

Medium

Heap (Priority Queue)

难点是自己写comparator。

class comparator {
public:
    bool operator() (const pair<string, int>& a, const pair<string, int>& b) const {
        if(a.second == b.second) return a.first > b.first;
        return a.second < b.second;
    }
};

class Solution {
public:
    vector<string> topKFrequent(vector<string>& words, int k) {
        unordered_map<string, int> m;
        
        for(string word : words) {
            m[word]++;
        }
        
        priority_queue<pair<string, int>, vector<pair<string, int>>, comparator> pq;
        
        for(auto item : m) {
            pq.push(item);
        }
        
        vector<string> ret;

        for(int i = 0; i < k; i++) {
            auto t = pq.top();
            pq.pop();
            ret.push_back(t.first);
        }
        
        return ret;
        
    }
};
上一篇:顺序队列


下一篇:[LC] 846. Hand of Straights