LeetCode题解——前K个高频单词

LeetCode题解——前K个高频单词

  • 题目介绍

  • 解题思路
  1. 这题需要抓住2个关键点,排序,每个元素出现次数,那么很容易可以想到用一个key-value相关的容器来存放数据,同时value存放出现次数
  2. 现在有两种可以,一是map,但是map不好排序(但也有方法),另一种用pair的方法插入到vector,可以用自带的sort函数进行排序了
  3. 不管如何首先先遍历words数组,取出key-value存放到map里面,然后接下来就是一个排序的操作了,如果出现次数相同按字母排序否则按次数排序
  4. dict[a] == dict[b] ? a < b : dict[a] > dict[b];dict就是上面的map,ab是key,这个三元表达式,就是次数相同比较key,否则比较value

  • 代码示例
class Solution {
public:
    vector<string> topKFrequent(vector<string>& words, int k) {
        map<string,int> dict;
        vector<string> res;
        for(auto &word:words){
            dict[word]++;         //统计元素出现个数
        }
        for(auto &[key,value]:dict){
            res.push_back(key);  //将key保存到vector,然后排序是以自己定义的函数排序,这边dict和res在同一个作用域,可以直接访问
        }
        sort(res.begin(),res.end(), [&](const string &a, const string &b) -> bool {
            return dict[a] == dict[b] ? a < b : dict[a] > dict[b];    //sort的比较函数
        });
        res.erase(res.begin() + k, res.end());   //只保留k个元素,后面的全部删除
        return res;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值