备战春招——12.04 算法

news2024/12/23 19:08:48

哈希表

哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_,完成映射操作,主要是相应的函数。map和set是有序的,使用的是树的形式,unordered_map和unordered_set使用的是散列比表的,无序。

相应函数

set multiset

相应的地址

map multimap

相应地址

unordered_map unordered_multimap

相应位置

unordered_set unordered_multiset

相应地址

刷题

多数元素

在这里插入图片描述
最朴素的方法,map统计,绷不住了,嘎嘎嘎

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        map<int,int> d;
        for(int i=0;i<nums.size();i++){
            d[nums[i]]++;
            if(d[nums[i]]>nums.size()/2){
                return nums[i];
            }
        }
        return 0;
    }

};

罗马数字转整数

在这里插入图片描述
只根据规定的格式进行匹配

class Solution {
public:
    int romanToInt(string s) {
        map<char,int> d;
        d['I'] = 1;
        d['V'] = 5;
        d['X'] = 10;
        d['L'] = 50;
        d['C'] = 100;
        d['D'] = 500;
        d['M'] = 1000;
        char last;
        int sum = 0; 
        for(int i =0;i<s.length();i++){
            sum += d[s[i]];
      
            if(last == 'I'&&(s[i]=='V'| s[i]=='X')){
                sum-=2;
                last = ' ';
             
            } else if(last == 'X'&& (s[i]=='L'| s[i]=='C')){
                    sum-=20;
                    last = ' ';
            
            }else if(last=='C'&&(s[i]=='D'| s[i]=='M')){
                    sum-=200;
                    last = ' ';
            }else{
                      last = s[i];
            }
        }
        return sum;
    }
};

整数转罗马数字

在这里插入图片描述
直接暴力if eiseif,绷不住了

class Solution {
public:
    string intToRoman(int num) {
        map<int,char> d;
        d[1]  = 'I';
        d[5] = 'V';
        d[10] = 'X';
        d[50] = 'L' ;
        d[100] ='C';
        d[500] = 'D';
        d[1000] = 'M' ;
        string s;
       int  n=num;
        while(n>0){
            if(n/1000){
                s.push_back(d[1000]);
                n-=1000;
            }else if(n/500){
                if(n>=900){
                    s.push_back(d[100]);
                    s.push_back(d[1000]);
                    n-=900;
                }else{
                    s.push_back(d[500]);
                    n-=500;
                }
            }else if(n/100){
                if(n>=400){
                    s.push_back(d[100]);
                    s.push_back(d[500]);
                    n-=400;
                }else{
                    s.push_back(d[100]);
                    n-=100;
                }
            }else if(n/50){
                if(n>=90){
                    s.push_back(d[10]);
                    s.push_back(d[100]);
                    n-=90;
                }else{
                    s.push_back(d[50]);
                    n-=50;
                }
            }else if(n/10){
                if(n>=40){
                    s.push_back(d[10]);
                    s.push_back(d[50]);
                    n-=40;
                }else{
                    n-=10;
                    s.push_back(d[10]);
                }
            }else if(n/5){
                 if(n>=9){
                    s.push_back(d[1]);
                    s.push_back(d[10]);
                    n-=9;
                }else{
                    n-=5;
                    s.push_back(d[5]);
                }
            }else{
                  if(n>=4){
                    s.push_back(d[1]);
                    s.push_back(d[5]);
                    n-=4;
                }else{
                    n-=1;
                    s.push_back(d[1]);
                }
            }
        }
        return s;
    }
};

电话号码的字母组合

在这里插入图片描述
就是暴力,emm,题解挺简单的,用一个map存储映射,然后开始暴力操作。

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        map<int,string> m;
        m['2']="abc";
        m['3']="def";
        m['4']="ghi";
        m['5']="jkl";
        m['6']="mno";
        m['7']="pqrs";
        m['8']="tuv";
        m['9']="wxyz";
        vector<string> data;
        for(int i=0;i<digits.length();i++){
            vector<string> d;
            d=data;
            data.clear();
            string digi = m[digits[i]];
            for(int j=0;j<digi.length();j++){
                if(d.empty()){
                    string aaa;
                    aaa+=digi[j];
                   data.push_back(aaa); 
                }else{
                    for(int h=0;h<d.size();h++){
                        data.push_back(d[h]+digi[j]);
                    }
            
                }  
             }
        }
        return data;
    }
};

存在重复元素

在这里插入图片描述
就一个集合解决

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        set<int> data;
        for(int i=0;i<nums.size();i++){
            if(data.find(nums[i])==data.end()){
                data.insert(nums[i]);
            }else{
                return true;
            }
        }
        return false;
    }
};

重复元素2

在这里插入图片描述

用一个映射存储数据,直接遍历,可能某个元素会出现多此,所以需要进行一个map位置的实时更新。

class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        map<int,int> m;
        for(int i=0;i<nums.size();i++){
            if(m.find(nums[i])!=m.end()){
                if((i-m[nums[i]])<=k){
                    return true;
                }else{
                    m[nums[i]]=i;
                }
            }else{
                m[nums[i]]=i;
            }
        }
        return false;
    }
};

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

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

相关文章

Ubuntu20.04/Linux中常用软件的安装

文章目录 一、安裝与卸载微信二、安裝与卸载QQ三、安装Chrome浏览器并加入apt更新四、安裝VScode4.1 安装常用插件4.2 减小Ipch缓存&#xff1a; 五、安装代码对比工具Meld六、安裝WPS七、安装PDF阅读器Foxit Reader八、安装文献管理软件Zotero九、安装有道云笔记十、安装远程控…

多线程详解1-互斥锁,读写锁,生产者消费者模型

文章目录 互斥量mutex互斥量基本原理死锁代码实现 读写锁基本概念为什么需要读写锁&#xff1f;相关函数读写锁实现 生产-消费者模型PV操作条件变量函数生产者消费者问题生产-消费者模型实现代码 互斥量mutex 互斥量基本原理 Linux系统编程 —互斥量mutex 互斥量mutex 前文提…

webpack学习-1.起步

webpack学习-1.起步 1.基础设置2.配置文件的引入3.总结 1.基础设置 首先 webpack是干嘛的呢&#xff0c;用官网的一张图 Webpack 是一个现代的静态模块打包工具。它主要用于将前端应用程序中的各种资源&#xff08;例如 JavaScript、CSS、图片等&#xff09;打包成一个或多个…

Docker Compose简单入门

Docker Compose 简介 Docker Compose 是一个编排多容器发布式部署的工具&#xff0c;提供命令集管理容器化应用的完整开发周期&#xff0c;包括服务构建&#xff0c;启动和停止。 Docker Compose 真正的作用是在一个文件&#xff08;docker-compose.yml&#xff09;中定义并运…

《opencv实用探索·九》中值滤波简单理解

1、引言 均值滤波、方框滤波、高斯滤波&#xff0c;都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合&#xff0c;因此含有噪声的像素也会被考虑进去&#xff0c;噪声不会被消除&#xff0c;而是以更柔和的方式存在。这时使用非线性滤波效果可能会更好。中值滤波是…

代码随想录第二十一天(一刷C语言)|回溯算法组合

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、回溯算法 1、种类 排列、组合、分割、子集、棋盘问题 2、回溯步骤 &#xff08;0&#xff09;回溯抽象 回溯法解决的问题均可以抽象为树形结构&#xff08;N叉树&#xff09; &…

渗透复现

初步接触 先进行主机发现 nmap 172.16.17.0/24 -p 80 先指定扫描80端口的 nmap 172.16.17.0/24 做的时候&#xff0c;一直没有发现之间有一个输入成了逗号 根据上面的结果&#xff0c;就可以知道了 我们会看到有几个open&#xff0c;应该就是这两个了 就会发现是可以的&…

MVCC是如何保证隔离性的

之前提到了MVCC可以一定程度上避免幻读&#xff0c;那具体MVCC是咋工作的呢&#xff1f; 需要介绍两个机制&#xff1a;read view和聚簇索引的两个隐藏列 read view 这个就是我们理解的快照&#xff0c;有四个字段&#xff0c;本事务id、活跃事务id列表&#xff08;包含自己&…

Biglnteger 和 BigDecimal类 - Java

BigInteger 和 BigDecimal类 1、应用场景 BigInteger 适合保存比较大的整型BigDecimal 适合保存精度更高的浮点型(小数) 2、BigInteger 当编程中需要处理很大的整数&#xff0c;long 不够用&#xff0c;就需要使用 Biglnteger 类。 使用 //创建&#xff1a;和类一样&…

手机传输数据到电脑该怎么操作?安卓、苹果都可以这样操作

安卓手机 你知道安卓手机传输数据到电脑的方法有哪些吗&#xff1f;下面我们就一起来看一看可以使用的一些方法。 采用 USB 数据线 这个方法应该是我们生活中较为常见的方法了&#xff0c;我们只需要使用手机的充电线&#xff0c;将其连接到电脑上&#xff0c;然后手机可能会…

网工学习7-配置 GVRP 协议

7.1GARP概述 GARP(Generic Attribute Registration Protocol)是通用属性注册协议的应用&#xff0c;提供 802.1Q 兼容的 VLAN 裁剪 VLAN pruning 功能和在 802.1Q 干线端口 trunk port 上建立动态 VLAN 的功能。 GARP 作为一个属性注册协议的载体&#xff0c;可以用来传播属性…

医药行业:轻松学会超低温冰箱技能

超低温冰箱在医疗、科研和生物领域中扮演着至关重要的角色&#xff0c;用于存储和保护对温度极为敏感的样品和药品。 然而&#xff0c;由于这些冰箱内的温度波动可能导致样品的损坏&#xff0c;因此对超低温冰箱的监控变得至关重要。 客户案例 医疗研究机构 上海某医疗研究机…

行业分析:全球山药产量约为7603.1万吨

山药味甘&#xff0c;性平。常被认为有健脾、益肺、固肾、涩精等功效。作为食用&#xff0c;山药所含的膳食纤维丰富&#xff0c;相比精细主食&#xff0c;如大米苗条等&#xff0c;更有饱腹感&#xff0c;对于控制食欲和体重有很好的辅助作用。另外&#xff0c;其所含的淀粉酶…

如何在Linux上搭建本地Docker Registry镜像仓库并实现公网访问

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

万兆多模光模块SFP-10G-SR:高速短距传输的最优选

随着信息技术的发展&#xff0c;企业和个人对数据传输速度和带宽需求不断增加。传统的千兆以太网已经不能满足高速数据传输的要求&#xff0c;因此万兆以太网技术崭露头角。作为万兆以太网中的重要组件之一&#xff0c;万兆多模SFP-10G-SR光模块引起了广泛的关注。本文将介绍万…

Latex去掉参考文献后面的参考文献所在页(去掉参考文献的反向超链接)

如下&#xff1a; 在使用latex插入参考文献的时候&#xff0c;最后面总是会出现这种代号。这是表明的是这条参考文献所在的页码&#xff0c;并且点击之后可以跳转到该页。正式来讲&#xff0c;这个叫超链接的BACKREF。若要去掉&#xff0c;只需要在引用hyperref的时候去掉page…

MYSQL练题笔记-聚合函数-各赛事的用户注册率

一、题目相关内容 1&#xff09;相关的表 2&#xff09;题目 3&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 有两张不同左右的表&#xff0c;用户表和赛事注册表。然后解题。 1.各种赛事的用户注册百分率 各种赛事的意味着通过contes…

Spring 声明式事务

Spring 声明式事务 1.Spring 事务管理概述1.1 事务管理的重要性1.2 Spring事务管理的两种方式1.2.1 编程式事务管理1.2.2 声明式事务管理 1.3 为什么选择声明式事务管理 2. 声明式事务管理2.1 基本用法2.2 常用属性2.2.1 propagation&#xff08;传播行为&#xff09;2.2.2 iso…

希宝猫罐头怎么样?专业人士告诉你营养好的猫罐头推荐

作为一个6年铲屎官来说&#xff0c;买过的猫罐头可以说是不计其数啦。对于猫罐头品牌选购和喂养相关知识&#xff0c;我还是有点心得的。希宝猫罐头怎么样呢&#xff1f; 希宝猫罐头采用了先进的加工工艺&#xff0c;注重产品的包装和密封性&#xff0c;包装设计比较符合年轻人…