• 【LeetCode】-- 692. 前K个高频单词


    1. 题目

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

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

    2. 示例

    示例 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 次。

    3. 分析

    1.字符串按照出现次数排序,那么要关注字符串和次数,考虑用map存储结构

    2.由于出现次数相同的字符串要按照字典顺序排序,因此排序必须是稳定的,可借助map和multimap的稳定特性对次数进行排序

    3.输出前k个字符串

    4. 代码实现

    1. class Solution {
    2. public:
    3. vector topKFrequent(vector& words, int k) {
    4. //1.将字符串存入map中
    5. mapint> countMap;
    6. for(auto& e:words)
    7. {
    8. countMap[e]++;
    9. }
    10. //2.使用map/multimap的特性进行排序,稳定
    11. multimap<int,string,greater<int>> sortMap;
    12. for(auto e:countMap)
    13. {
    14. sortMap.insert(make_pair(e.second,e.first));
    15. }
    16. //3.输出前k个字符串
    17. vector retV;
    18. auto rit = sortMap.begin();
    19. while(k--)
    20. {
    21. retV.push_back(rit->second);
    22. rit++;
    23. }
    24. return retV;
    25. }
    26. };

  • 相关阅读:
    c++|内联函数
    Promise期约函数的实现
    SpringCloud-OAuth2(一):基础篇
    Elasticsearch:使用 LangChain 对话链和 OpenAI 的聊天机器人
    WPF 控件的缩放和移动
    poj 1068 parencondings
    JMeter 逻辑控制之IF条件控制器
    力扣561. 数组拆分
    1022D进制的A+B(满分)
    JAVASE 第二十六天
  • 原文地址:https://blog.csdn.net/gx714433461/article/details/126580260