【C++】map/multimap/set/multiset的经典oj例题 [ 盘点&全面解析 ] (28)

前言

大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

目录

  • 一.前K个高频单词【mutiset】
  • 二.左右符号匹配问题【map】
  • 三.两个数组的交集I【set】

一.前K个高频单词【mutiset】

题目:求一个vector<string>中出现最高频的前k个单词
分析:

  • 本题中需要用到mutiset的性质:可以重复的key
  • 由于mutiset默认是从小到大比,所以我们要先设置一个 仿函数Compare实现从大到小排序
  • 用<单词,单词出现次数>构建键值对,然后将vector中的单词放进去,统计每个单词出现的次数
  • 利用mutiset的存储也是键值对:将单词按照其出现次数进行排序,出现相同次数的单词集中在一块 【count = e.second】
  • 分批塞入新的set中,当下一个mutiset的引用的计数小于(即不等于)前者时,将set中的元素压入vector,随后清空set,重复以上
  • 最后把mutiset导空后,可能还会剩下一组数据在set中,此时再根据需求进行导入
class Solution {
public:
    class Compare
    {
    public:
        // 在set中进行排序时的比较规则
        bool operator()(const pair<string, int>& left, const pair<string, int>& right)
        {
            return left.second > right.second;
        }
    };
    
    vector<string> topKFrequent(vector<string>& words, int k)
    {
        // 用<单词,单词出现次数>构建键值对,然后将vector中的单词放进去,统计每个单词出现的次数
            map<string, int> m;
        for (size_t i = 0; i < words.size(); ++i)
            ++(m[words[i]]);
            
        // 将单词按照其出现次数进行排序,出现相同次数的单词集中在一块
        multiset<pair<string, int>, Compare> ms(m.begin(), m.end());
        
        // 将相同次数的单词放在set中,然后再放到vector中
        set<string> s;
        size_t count = 0;   // 统计相同次数单词的个数
        size_t leftCount = k;

        vector<string> ret;
        for (auto& e : ms)
        {
            if (!s.empty())
            {
                // 相同次数的单词已经全部放到set中
                if (count != e.second)
                {
                    if (s.size() < leftCount)
                    {
                        ret.insert(ret.end(), s.begin(), s.end());
                        leftCount -= s.size();
                        s.clear();
                    }
                    else
                    {
                        break;
                    }
                }
            }
            count = e.second;
            s.insert(e.first);
        }
        
        for (auto& e : s)
        {
            if (0 == leftCount)
                break;
            ret.push_back(e);
            leftCount--;
        }
        return ret;
    }
};

二.左右符号匹配问题【map】

题目:
在这里插入图片描述
解题思路分析:

  • 这道题是我们学习栈时遇到的经典例题, 将一个字符串中的左括号【“【”“{”“(”】分别进栈,遇到右括号时,对栈顶元素进行保存并头删,再进行左右括号匹配
  • 当我们学会map后,可以建立"{" “}” “(”“)”“[”"]"的映射关系来代替法一中的 左右括号匹配
  • 但大体逻辑还是相同
    在这里插入图片描述

三.两个数组的交集I【set】

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

解题思路1分析:

  • 先把数组都 放到set中(进行去重)
  • 遍历另一个set 中的元素,判断有哪些在第一个set中,在的就是他们的交集元素
    在这里插入图片描述

解题思路2分析:

  • 先把数组都 放到set中(进行去重)
  • 我们通过set的性质知:通过其迭代器进行遍历,元素key是有序的(从小到大)
  • 那么我们可以对这两个数组对应的set的元素进行分别比较小的key++,相等一起++,最后得到相等得就是【交集】;小的key++,相等同时++,最后得到的就是【差集】如图所示
  • 下图演示的是交集;如果求差集,还要在后面加两个判断,分别是set1不为空,set2不为空,并且将剩余元素入栈
    在这里插入图片描述
  • 代码展示:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Advanced Renamer

Advanced Renamer 安装链接 1.前后添加字符 2.字符转数字&#xff0c;编号整体加减

AIGC专题报告:AIGC助力大规模对象存储服务OSS的能效提升

今天分享的AIGC系列深度研究报告&#xff1a;《AIGC专题报告&#xff1a;AIGC助力大规模对象存储服务OSS的能效提升》。 &#xff08;报告出品方&#xff1a;全球软件开发大会&#xff09; 报告共计&#xff1a;18页 结合AI的智能运维助力能效提升 场景1&#xff1a;通过 AI…

Java Spring + SpringMVC + MyBatis(SSM)期末作业项目

本系统是一个图书管理系统&#xff0c;比较适合当作期末作业主要技术栈如下&#xff1a; - 数据库&#xff1a;MySQL - 开发工具&#xff1a;IDEA - 数据连接池&#xff1a;Druid - Web容器&#xff1a;Apache Tomcat - 项目管理工具&#xff1a;Maven - 版本控制工具&#xf…

elementUI中的 “this.$confirm“ 基本用法,“this.$confirm“ 调换 “确认“、“取消“ 按钮的位置

文章目录 前言具体操作总结 前言 elementUI中的 "this.$confirm" 基本用法&#xff0c;"this.$confirm" 调换 "确认"、"取消" 按钮的位置 具体操作 基本用法 <script> this.$confirm(这是数据&#xff08;res.data&#xff0…

Kafka在微服务架构中的应用:实现高效通信与数据流动

微服务架构的兴起带来了分布式系统的复杂性&#xff0c;而Kafka作为一款强大的分布式消息系统&#xff0c;为微服务之间的通信和数据流动提供了理想的解决方案。本文将深入探讨Kafka在微服务架构中的应用&#xff0c;并通过丰富的示例代码&#xff0c;帮助大家更全面地理解和应…

VMware安装Ubuntu20.04并使用Xshell连接虚拟机

文章目录 虚拟机环境准备重置虚拟网络适配器属性&#xff08;可选&#xff09;配置NAT模式的静态IP创建虚拟机虚拟机安装配置 Xshell连接虚拟机 虚拟机环境准备 VMware WorkStation Pro 17.5&#xff1a;https://customerconnect.vmware.com/cn/downloads/details?downloadGr…

unity 2d 入门 飞翔小鸟 柱子移动(十一)

c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class PoleMove : MonoBehaviour {//移动上限制public float up;//移动下限public float below;//速度private float speed;// Start is called before the first frame update…

【S32DS报错】-3-提示J-Link GDB Server failed:Device name ‘S32K344‘ not recognised错误

目录 1 Error错误提示 2 Error错误原因&#xff0c;以及如何消除Error错误 2.1 安装SEGGER J-Link 2.2 使用SEGGER J-Link的J-Flash连接MCU芯片 2.3 使用SEGGER J-Link下载程序 结尾 【S32K3_MCAL从入门到精通】合集&#xff1a; S32K3_MCAL从入门到精通https://blog.cs…

异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测

异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测 目录 异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测效果一览基本介绍模型准备模型设计参考资料效果一览 基本介绍 训练一个双向 LSTM 自动编码器来检测机器是否正常工作。 自动编码器接受…

智能优化算法应用:基于减法平均算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于减法平均算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于减法平均算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.参考…

【前端】CSS基础(学习笔记)

一、简介 1、HTML局限性 HTML只关注内容的语义&#xff0c;但是丑&#xff01; 2、CSS概要 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称&#xff0c;有时我们也会称之为 CSS 样式表或级联样式表。 CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内…

进程、线程、线程池状态

线程几种状态和状态转换 进程主要写明三种基本状态&#xff1a; 线程池的几种状态&#xff1a;

Latex安装教程

目录 一、概述 二、安装Texlive语言 三、安装texstudio编译器 附录 一、概述 说一下Tex、LaTex、TexLive、Texstudio之间的区别&#xff1a; Tex&#xff1a;是一种具有编译和排版功能的基础语言&#xff0c;其作用可以直接类比 C 语言。 LaTex&#xff1a;LaTex是图灵奖…

MongoDB的删除文档、查询文档语句

本文主要介绍MongoDB的删除文档、查询文档命令语句。 目录 MongoDB删除文档MongoDB查询文档 MongoDB删除文档 MongoDB是一种基于文档的NoSQL数据库&#xff0c;它使用BSON格式存储文档。删除文档是MongoDB数据库中的常见操作之一。 下面是MongoDB删除文档的详细介绍和示例&am…

Kafka安全性探究:构建可信赖的分布式消息系统

在本文中&#xff0c;将研究Kafka的安全性&#xff0c;探讨如何确保数据在传输和存储过程中的完整性、机密性以及授权访问。通过详实的示例代码&#xff0c;全面讨论Kafka安全性的各个方面&#xff0c;从加密通信到访问控制&#xff0c;帮助大家构建一个可信赖的分布式消息系统…

Android Audio实战——音频链路分析(二十五)

在 Android 系统的开发过程当中,音频异常问题通常有如下几类:无声、调节不了声音、爆音、声音卡顿和声音效果异常(忽大忽小,低音缺失等)等。尤其声音效果这部分问题通常从日志上信息量较少,相对难定位根因。想要分析此类问题,便需要对声音传输链路有一定的了解,能够在链…

go grpc高级用法

文章目录 错误处理常规用法进阶用法原理 多路复用元数据负载均衡压缩数据 错误处理 gRPC 一般不在 message 中定义错误。毕竟每个 gRPC 服务本身就带一个 error 的返回值&#xff0c;这是用来传输错误的专用通道。gRPC 中所有的错误返回都应该是 nil 或者 由 status.Status 产…

nodejs+vue+微信小程序+python+PHP的游戏测评网站设计与实现-计算机毕业设计推荐

通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c;将游戏测评网站功能模块主要分为管理员模块。管理员添加个人中心、管理员管理、基础数据管理、公告管理、用户管理、游戏管理、游戏测评管理、游戏攻略管理、轮播图信息等操作。  随着时代的…

轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)

原理简介: 1. 基于rendering pass graph实现。 2. WGSL Shader 基于文件系统和宏机制动态组装。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PBRShadowTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&a…

学习记录---kubernetes动态卷使用---storageClass及驱动安装(nfs驱动)

一、简介 kubernetes中&#xff0c;在存储层面&#xff0c;我们常用到的两个资源是pv和pvc&#xff0c;其中pv是实际创建出来的一致性卷&#xff0c;我们可以通过pv将容器中的数据进行持久化保存&#xff0c;而pvc则可以理解为pod使用pv的中间控制器&#xff0c;通过pvc将pv绑…