/* * @lc app=leetcode id=692 lang=cpp * * [692] Top K Frequent Words */ class Solution { public: vector topKFrequent(vector &words, int k) { vector res; unordered_map m; auto comp = [](pair &a, pair &b) { // first为出现次数,second为字母顺序排列 return a.first == b.first ? a.second < b.second : a.first > b.first; }; priority_queue, vector>, decltype(comp)> pq(comp); for (auto x : words) { m[x]++; } for (auto x : m) { pq.push({x.second, x.first}); if (pq.size() > k) pq.pop(); } while (!pq.empty()) { res.push_back(pq.top().second); pq.pop(); } reverse(res.begin(), res.end()); return res; } };