【用map解决高频单词问题】返回前k个高频单词

news2024/9/23 5:09:03

在这里插入图片描述

目录

  • 1.前言
  • 2.题目简介
  • 3.求解思路
  • 4.示例代码
    • 4.1换个稳定排序解决
    • 4.2用仿函数强行进行控制

1.前言

ok,好久不写博客了,这里简单的来写一写用到关于容器map来解决前k个高频单词的问题。
当然,这个问题也可以用优先级队列(堆)来解决,这里仅仅是给出其中一种方法。

2.题目简介

题目链接:LINK
在这里插入图片描述

3.求解思路

我们的思路就是用map容器统计次数,进行将其拷贝到vector中。
之后把前k个次数大的拷贝到vector中并进行返回。

class Solution {
public:
class comp{
    public:
    bool operator()(const pair<string, int> p1, const pair<string,int> p2)
    {
        return p1.second > p2.second;
    }
};
    vector<string> topKFrequent(vector<string>& words, int k) {
        //用map统计次数
        map<string, int> m;
        for(auto&e:words)
        {
            m[e]++;
        }

        //次数统计完之后,我们要把他放到一个vector中进行排序
        vector<pair<string, int>> v(m.begin(), m.end());
        sort(v.begin(),v.end(),comp());
        
        //把满足条件的按照vector<string>的形式拿出来
        vector<string> ret;
        for(int i = 0; i < k; i++)
        {
            ret.push_back(v[i].first);
        }

        //返回结果
        return ret;
    }
};

倘若我们按照上面写出代码之后,我们就会发现:会报错!
在这里插入图片描述
其实,这个主要是因为虽然我们输出结果是按照统计次数大小排布的,但是相同次数的单词并不符合题目中要求的。
这主要是因为sort函数底层是快排,快排是一种不稳定排序,因此我们可以换一种稳定排序或者是用仿函数加条件强行控制。

4.示例代码

4.1换个稳定排序解决

class Solution {
public:
class comp{
    public:
    bool operator()(const pair<string, int> p1, const pair<string,int> p2)
    {
        return p1.second > p2.second;
    }
};
    vector<string> topKFrequent(vector<string>& words, int k) {
        //用map统计次数
        map<string, int> m;
        for(auto&e:words)
        {
            m[e]++;
        }

        //次数统计完之后,我们要把他放到一个vector中进行排序
        vector<pair<string, int>> v(m.begin(), m.end());
        stable_sort(v.begin(),v.end(),comp());
        
        //把满足条件的按照vector<string>的形式拿出来
        vector<string> ret;
        for(int i = 0; i < k; i++)
        {
            ret.push_back(v[i].first);
        }

        //返回结果
        return ret;
    }
};

在这里插入图片描述

4.2用仿函数强行进行控制

class Solution {
public:
class comp{
    public:
    bool operator()(const pair<string, int> p1, const pair<string,int> p2)
    {
        return p1.second > p2.second || (p1.second == p2.second && p1.first < p2.first);
    }
};
    vector<string> topKFrequent(vector<string>& words, int k) {
        //用map统计次数
        map<string, int> m;
        for(auto&e:words)
        {
            m[e]++;
        }

        //次数统计完之后,我们要把他放到一个vector中进行排序
        vector<pair<string, int>> v(m.begin(), m.end());
        sort(v.begin(),v.end(),comp());
        
        //把满足条件的按照vector<string>的形式拿出来
        vector<string> ret;
        for(int i = 0; i < k; i++)
        {
            ret.push_back(v[i].first);
        }

        //返回结果
        return ret;
    }
};

在这里插入图片描述


在这里插入图片描述


EOF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

免费扫描试卷的软件有哪些?5个软件帮助你轻松进行试卷扫描

免费扫描试卷的软件有哪些&#xff1f;5个软件帮助你轻松进行试卷扫描 扫描试卷的软件可以帮助你将纸质试卷转化为电子版&#xff0c;方便保存、分享和编辑。以下是五款免费的试卷扫描软件&#xff0c;它们功能强大且易于使用&#xff0c;能够帮助你轻松完成试卷扫描。 试卷…

【精彩瞬间】2024外滩大会回顾

9月8号&#xff0c;为期3天的“2024 inclusion外滩大会”在上海黄浦圆满落下帷幕。本届大会&#xff0c;共吸引了5.2万人到场参观&#xff0c;无论是参会规模还是国际嘉宾的数量都创下历史新高。 500位演讲嘉宾分别在1场开幕主论坛、36场见解分论坛上聚焦“ai产业新实践”“科技…

基于STM32的保温水壶控制器设计

文章目录 前言资料获取设计介绍功能介绍设计源码具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

【MATLAB】矩阵的合并

矩阵的合并是指将两个或者多个矩阵合并到一起构成一个新的矩阵。矩阵标识符方括号 [ ]&#xff0c;不仅可以用来创建新的矩阵&#xff0c;还可以用来将若干个矩阵合并到一起。表达式 C [A B] 将矩阵A和B在水平方向上合并到一起&#xff0c;而表达式C[A;B]则将矩阵A和B在竖直方…

java反射(reflection)的基本理解和使用

目录 一、什么是反射 二、反射的主要用途&#xff1f; 三、什么情况下使用反射 四、反射有什么优点&#xff1f; 1、增加程序的灵活性 2、避免将固有的逻辑程序写死到代码里 3、提高代码的复用率 4、支持动态代理和动态配置 5、支持自动化测试和代码生成 6、自由度高…

ABAP EXCEL宏函数应用

【应用场景】 1. excel导出项目及对应的分期,楼栋的各个产品类型对应的各个面积指标数据, 分项目/分期/楼栋三个SHEET页签。当用户在楼栋层级编辑完产品类型对应的面积指标时,可以 通过宏函数自下往上先汇总到相同产品类型+面积指标的分期层级,再自动汇总到项目层级面积…

万龙觉醒免费辅助脚本:VMOS云手机助力物资获取与养成!

在《万龙觉醒》中&#xff0c;资源获取和英雄养成是游戏的重要组成部分&#xff0c;而使用VMOS云手机可以为玩家带来更高效的游戏体验。通过使用VMOS云手机&#xff0c;玩家可以轻松实现24小时不间断的游戏辅助&#xff0c;无需反复安装或更新游戏&#xff0c;因为VMOS云手机自…

upload-labs通关教程

一.第一关&#xff08;前端绕过&#xff09; 首先准备一个php小马 <?php phpinfo();?>这是调用phpinfo这个函数&#xff0c;查看php的配置信息 首先上传1.php发现 使用BP抓不到包&#xff0c;猜测被前端验证了&#xff0c;查看网页源代码 可以看到下面有一段js代码过…

国内超声波清洗机哪个品牌好?非常好用的超声波清洗机

在当今社会快速生活的节奏下&#xff0c;个人健康与生活品质成为了焦点话题。面对传统清洁方法的局限性和可能对物品造成的伤害&#xff0c;人们愈发倾向于探索更高效、安全的清洁方案。超声波清洗技术恰逢其时地步入大众视野&#xff0c;凭借其高效清洁力与环保特性&#xff0…

鸿蒙开发(API 12 Beta6版)【P2P模式】 网络WLAN服务开发

概述 无线局域网&#xff08;Wireless Local Area Networks&#xff0c;WLAN&#xff09;&#xff0c;是通过无线电、红外光信号或者其他技术发送和接收数据的局域网&#xff0c;用户可以通过WLAN实现结点之间无物理连接的网络通讯。常用于用户携带可移动终端的办公、公众环境…

打造无死角安防网:EasyCVR平台如何助力智慧警务实现视频+AI的全面覆盖

一、背景概述 随着科技的飞速发展&#xff0c;智慧城市建设已成为提升社会治理能力、增强公共安全水平的重要途径。在警务领域&#xff0c;智慧警务作为智慧城市的重要组成部分&#xff0c;正通过融合视频监控技术与人工智能&#xff08;AI&#xff09;解决方案&#xff0c;实…

数据库中的主码、候选码、主属性、非主属性

参考链接 候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结 - 知乎 (zhihu.com) 1.码&#xff1a; 能够标识一条记录的属性或者属性集 2.候选码 能够标识一条记录的最小属性集 任一候选键的任何真子集都不能唯一标识一个记录&#xff08;比如在成绩表…

诸葛io:消费金融行业智能运营与数智化经营模型构建

规范化的快速发展已成为消费金融行业的主旋律&#xff0c;消金公司亟待制定数智化转型战略&#xff0c;建设自主营销与精细化运营能力&#xff0c;以找到存量时代的全新增长密码。 容联云旗下诸葛智能公司作为数智化经营领域的杰出代表&#xff0c;凭借数据技术先进性、金融业…

将esp32-s3-eye做为USB网络摄像头(UVC设备)

官方网址&#xff1a;usb_webcam 支持UVC同步、批量传输模型只支持MJPEG传输格式支持板上LCD动画esp32-s3-eye&#xff08;IDF v5.0或更高版本&#xff09; 硬件要求 官方默认的USB WebCam config就是乐鑫带摄像头OV2604的esp32-s3-eye&#xff0c;其他的开发板可以参考官方网…

仿微信QQ聊天系统源码设计开发

一、引言 随着移动互联网的快速发展&#xff0c;即时通讯软件已成为人们日常生活中不可或缺的一部分。仿微信QQ聊天系统作为一种模仿主流聊天软件功能的应用&#xff0c;旨在为用户提供高效、便捷的沟通方式。本文将从系统架构、功能模块等方面详细介绍仿微信QQ聊天系统的设计…

Visual studio自动添加头部注释

记事本打开VS版本安装目录下的Class.cs文件 增加如下内容&#xff1a;

Linux 访问控制列表(Access Control List)

在Linux中&#xff0c;目录或文件的权限是针对的所有者(owner)&#xff0c;所属组(group)&#xff0c;其他人(others)这3种类别来设置的。这种根据类别控制权限的方法无法精确控制每个用户的行为。为了解决这个问题&#xff0c;Linux引入了访问控制列表&#xff08;Access Cont…

网络安全知识:什么是访问控制列表 (ACL)?

访问控制列表 (ACL) 是网络安全和管理的基础。它们在确定谁或什么可以访问网络内的特定资源方面发挥着重要作用。 本文深入探讨了 ACL 的复杂性&#xff0c;探索了其类型、组件、应用程序和最佳实践。我们还将比较不同操作系统的 ACL&#xff0c;并讨论它们在网络架构中的战略…

基于C#的UDP协议消息传输

1. 服务端 internal class Program{static void Main(string[] args){//1.创建SocketSocket socketServer new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);//2.绑定IP、端口号EndPoint endPoint new IPEndPoint(IPAddress.Parse("127.0.0.1&…

Grid布局常用属性梳理

布局属性 aligin-items 作用&#xff1a;CSS align-items 属性设置了所有直接子元素的 align-self 值作为一个组。在 Flexbox 中&#xff0c;它控制子元素在交叉轴上的对齐。在 Grid 布局中&#xff0c;它控制了子元素在其网格区域内的块向轴上的对齐。 应用对象&#xff1a;…