• 【力扣 076】692. 前K个高频单词


    692. 前K个高频单词

    给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。

    返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。

    示例 1:

    输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2
    输出: ["i", "love"]
    解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
        注意,按字母顺序 "i" 在 "love" 之前。
    示例 2:

    输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
    输出: ["the", "is", "sunny", "day"]
    解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,
        出现次数依次为 4, 3, 2 和 1 次。
     

    注意:

    1 <= words.length <= 500
    1 <= words[i] <= 10
    words[i] 由小写英文字母组成。
    k 的取值范围是 [1, 不同 words[i] 的数量]

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/top-k-frequent-words
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    方法一、优先队列

    代码实现:

    class Solution {
    public:
      vector<string> topKFrequent(vector<string> &words, int k)
      {
        unordered_map<string, int> cnt;
        for (auto &word : words)
        {
          cnt[word]++;
        }
        auto cmp = [](const pair<string, int> &a, const pair<string, int> &b)
        {
          return a.second == b.second ? a.first < b.first : a.second > b.second;
        };
        priority_queue<pair<string, int>, vector<pair<string, int>>, decltype(cmp)> que(cmp);
        for (auto &it : cnt)
        {
          que.emplace(it);
          if (que.size() > k)
          {
            que.pop();
          }
        }
        vector<string> ret(k);
        for (int i = k - 1; i >= 0; i--)
        {
          ret[i] = que.top().first;
          que.pop();
        }
        return ret;
      }
    };
  • 相关阅读:
    私活。
    sql server 模拟数组【转】
    Updlock 与 Holdlock
    连上交换机后电脑无法上网
    linux的发展
    MySQL5.7中,用root用户登陆不进去数据库,报以下错误,然后重新修改了密码,好了。
    nginx反响代理tomcat配置ssl
    tomcat日志的切割脚本
    重启nginx报错:[error] invalid PID number "" in "/application/nginx-1.13.3/logs/nginx.pid"
    数据盘的挂载
  • 原文地址:https://www.cnblogs.com/sunbines/p/16310987.html
Copyright © 2020-2023  润新知