LeetCode 692.前K个高频单词

LeetCode 692.前K个高频单词 C++

思路🧐:

首先用map存储该字典,然后放进vector进行排序,注意sort的排序规则与我们想要的规则不一致,所以我们需要写一个伪函数来判断second(value值),由于该题要求了稳定性,所以我们在伪函数还需要继续判断相等情况的顺序。排完序后用vector将前k个单词存储起来返回。

代码🔎:

c++ 复制代码
class Solution {
public:
    struct Ksort
    {
        bool operator()(const pair<string,int>& kv1,const pair<string,int>& kv2)
        {
            return kv1.second > kv2.second || (kv1.second == kv2.second) && kv1.first < kv2.first;
        }
    };
    vector<string> topKFrequent(vector<string>& words, int k) {
        map<string, int> top;
        for(auto& e : words)
        {
            top[e]++;
        }
        vector<pair<string,int>> v(top.begin(),top.end()); //vector兼容多种迭代器
        sort(v.begin(),v.end(),Ksort()); //排序
        vector<string> topv;
        for(size_t i = 0; i < k; i++) //选取前k个
        {
            topv.push_back(v[i].first);
        }
        return topv;
    }
};
相关推荐
haoly19895 分钟前
数据结构和算法篇-线性查找优化-移至开头策略
数据结构·算法·移至开头策略
宋恩淇要努力37 分钟前
C++继承
开发语言·c++
江公望3 小时前
Qt qmlRegisterSingletonType()函数浅谈
c++·qt
学Linux的语莫3 小时前
机器学习数据处理
java·算法·机器学习
逆小舟4 小时前
【C/C++】指针
c语言·c++·笔记·学习
earthzhang20214 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
江公望4 小时前
Qt QtConcurrent使用入门浅解
c++·qt·qml
我是华为OD~HR~栗栗呀4 小时前
23届考研-Java面经(华为OD)
java·c++·python·华为od·华为·面试
爱吃喵的鲤鱼5 小时前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
郝学胜-神的一滴5 小时前
使用Linux的read和write系统函数操作文件
linux·服务器·开发语言·数据库·c++·程序人生·软件工程