【LeetCode】13,罗马数字转整数。 难度等级:简单。知识点:map和unordered_map的区别

news2024/10/7 14:30:51

文章目录

    • 一、题目
    • 二、初级解法:顺序遍历字符串
      • 我的解法(语法平平无奇)
      • 语法接近
    • 三、精妙解法:逆序遍历字符串
    • 四、知识点:map和unordered_map的区别

LeetCode 第13题,罗马数字转整数;难度等级:简单。

知识点:map和unordered_map的区别

一、题目

在这里插入图片描述
在这里插入图片描述

二、初级解法:顺序遍历字符串

我的解法(语法平平无奇)

顺序遍历字符串是我们最自然想到的方法,我的解法如下:

class Solution {
private:
    unordered_map<char, int> roman = {
        {'I', 1},
        {'V', 5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000},
    };

public:
    int romanToInt(string s) {
        int length=s.size();
        int sum=0;
        for(int i=0;i!=length;i++){
            int romanValue=roman[s[i]];
            if(i!=length-1 && romanValue<roman[s[i+1]])
                sum-=romanValue;
            else
                sum+=romanValue;  
        }
        return sum;
    }
};

语法接近

看到 if -else 就应该想到是否可以用 三目运算符 " ?:"来代替,进阶语法如下:

class Solution {
private:
    unordered_map<char, int> roman = {
        {'I', 1},
        {'V', 5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000},
    };

public:
    int romanToInt(string s) {
        int length=s.size();
        int sum=0;
        for(int i=0;i!=length-1;i++)
            sum += (roman[s[i]]<roman[s[i+1]]) ? -roman[s[i]] : roman[s[i]];
        sum += roman[s[length-1]];
        return sum;
    }
};

三、精妙解法:逆序遍历字符串

思路:从右到左逆序遍历字符串,记录当前遇到的最大的数字;遇到更大的就加,并且更新最大数,遇到小的就减。代码如下:

class Solution {
private:
    unordered_map<char, int> roman = {
        {'I', 1},
        {'V', 5},
        {'X', 10},
        {'L', 50},
        {'C', 100},
        {'D', 500},
        {'M', 1000},
    };

public:
    int romanToInt(string s) {
        int length=s.size();
        int sum=roman[s[length-1]];   //初始化sum为最后一个字符的值
        int max=roman[s[length-1]];   //初始化最后一个字符为最大字符
        for(int i=length-2;i>=0;i--){
            int value=roman[s[i]];
            sum += (value<max)? -value : value;
            max = (value<max)? max : value;   //更新最大值
        }
        return sum;
    }
};

四、知识点:map和unordered_map的区别

unordered_map就是通俗意义上的hash map,map和unordered_map的底层实现原理具有很大差距,因此它们的使用场景也不尽相同。二者区别如下:

mapunordered_map
是否有序有序无序
底层实现红黑树哈希表
查找块,Average: O(1) , Wrost Cse: O(n)log(n)
插入块,Average: O(1) , Wrost Cse: O(n)log(n) + 平衡二叉树所用时间
删除块,Average: O(1) , Wrost Cse: O(n)log(n) + 平衡二叉树所用时间
使用场景多次无序查找需要有序性或者对单次查询有时间要求的应用场景下
(单次查询时map可以确保良好的最坏情况运行时间)

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

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

相关文章

大厂视频面试,因为截屏作废

大厂视频面试现在这么严格了么&#xff1f;无意间按到截屏直接显示面试作废&#xff0c;好在最后和HR解释了下&#xff0c;再约时间重新面。 作为一个面试过3、4家大厂&#xff0c;现在在鹅厂工作的过来人来说&#xff0c;上面遇到的这个问题是AI面&#xff0c;不用太担心&…

React项目总结:上一步的终点,下一步的起点

项目简介 本人利用 react18.2 json-server 做了一个后台管理系统。 包含&#xff1a; 用户管理权限管理站内信审核管理站内信发布管理 等内容。 其中涉及到react-router V6.0的使用以及一些权限控制等内容。 更多精彩内容&#xff0c;请微信搜索“前端爱好者“&#xff…

Makefile基础教程(函数的使用)

文章目录 前言一、自定义函数1.使用示例2.注意事项 二、预定义函数1.call函数2.abspath函数 总结 前言 在Makefile中也是存在函数的&#xff0c;在 Makefile 中&#xff0c;可以使用函数调用来处理变量、字符串和路径等操作。那么下面就来看看是如何在makefile中使用函数的吧。…

计算机网络基础(四)—— 什么是TCP/IP协议?是两种网络协议?

文章目录 01 | &#x1f353; 概念 \color{red}{概念} 概念&#x1f353;02 | &#x1f34a; T C P / I P 分层模型 \color{orange}{TCP/IP分层模型} TCP/IP分层模型&#x1f34a;03 | &#x1f34b; 数据链路层协议 \color{yellow}{数据链路层协议} 数据链路层协议&#x1f34…

景区剧本杀小程序

景区剧本杀具有以下几个方面的前景&#xff1a; 景区旅游升级&#xff1a;随着人们对于景区旅游体验的多样化需求增加&#xff0c;景区剧本杀作为一种互动性强、参与感强的旅游体验项目&#xff0c;将会得到越来越多游客的喜爱和关注。 移动互联网应用&#xff1a;景区…

C++ 有元 内部类 匿名对象

有元 使用有元就可以突破封装&#xff0c;可以直接对类当中 私有的 成员 成员函数等等进行访问&#xff0c;在某一次上提供了遍历&#xff0c;但是这增大的 耦合性&#xff0c;破坏了封装&#xff0c;所以建议有元不要多用。 所谓耦合性就是 &#xff0c;某两个 东西的 关系&a…

程序员开发Linux常用命令

本文对程序开发过程中常用的Linux命令进行总结&#xff0c;随时进行补充&#xff0c;属于科普篇&#xff0c;希望对大家有所帮助 file命令 该命令用于查看文件的基本信息&#xff0c;比如编码格式&#xff0c;文件类型等信息&#xff0c;对于可执行程序或者动态链接库文件&am…

【Python入门知识】类和对象,要想学的好基础得打好

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! Python 类/对象 Python 是一种面向对象的编程语言。 Python 中的几乎所有东西都是对象&#xff0c;拥有属性和方法。 类&#xff08;Class&#xff09;类似对象构造函数&#xff0c;或者是用于创建对象的“蓝图”。 创建…

Java 判空的常见方法

一、 对象判空 if (obj ! null) {// 进行对象非空判断 }Object obj null; // 或者 obj new Object(); if (obj null) {// 对象为空 }另外&#xff0c;Guava 库还提供了一个更方便的方法&#xff0c;使用方式如下&#xff1a; import com.google.common.base.Objects;if (O…

SOLIDWORKS 30个实用小技巧

很多人在学习SolidWorks时&#xff0c;会有很多疑问&#xff0c;都不知道如何解答&#xff0c;所以走了很多弯路。今天&#xff0c;我们就来讲讲在学习SolidWorks中的那些小技巧吧&#xff01; 1、SOLIDWORKS技巧之按“空格键&#xff1a;”弹出快捷菜单双击某一视图&#xff0…

webSocket介绍及项目实战【在线聊天系统】

文章目录 一&#xff1a;消息推送常用方式介绍1.1 轮询&#xff1a;浏览器以指定的时间间隔向服务器发出HTTP请求&#xff0c;服务器实时返回数据给浏览器1.2 长轮询&#xff1a;浏览器发出ajax请求&#xff0c;服务器端接收到请求后&#xff0c;会阻塞请求直到有数据或者超时才…

学习之-Spring Cache缓存框架应用本地缓存

此文章用于个人学习记录&#xff0c;原文地址&#xff1a;https://zhuanlan.zhihu.com/p/452315531 如果想了解springCache与redis的交互请看其他文章 缓存是web项目不可或缺的一部分&#xff0c;通过缓存能够降低服务器数据库压力&#xff0c;提高服务器的稳定性及响应速度。…

Rust + 嵌入式:强力开发组合

Rust 的由来 Rust 编程语言的灵感诞生于一次意外。2006年&#xff0c;当 Graydon Hoare 回到位于温哥华的公寓时&#xff0c;发现电梯又因为软件崩溃出了故障。住在 21 楼的他无奈爬楼时&#xff0c;不禁心想&#xff0c;“我们搞计算机的&#xff0c;怎么连个能正常运行的电梯…

接口测试要会什么技能?测试老鸟总结,从接口到接口自动化全面盲扫...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

YOLOv5改进:引入DenseNet思想打造密集连接模块,彻底提升目标检测性能

目录 一、密集连接模块的介绍1、密集连接的概念2、密集连接与残差连接的对比3、DenseNet的结构 二、 YOLOv5中引入密集连接模块的原因1、密集连接模块对于目标检测的优势2、密集连接模块对目标检测性能的影响 三、 YOLOv5中密集连接模块的具体实现1、使用DenseNet的基本单元Den…

怎样才能尽快从开发岗转到产品经理岗位?

越来越多的开发同学随着工作年限的增长都会产生类似的想法。 当然&#xff0c;背后的原因也是多种多样&#xff0c;像薪资上的限制、行业前景的担忧等等&#xff0c;很多同学则踌躇在原地不敢转产品岗位&#xff0c;而有的同学则是通过各种不同方式顺利转岗到产品经理岗位&…

树莓派从源码构建安装Git最新版

1、查看Git版本 首先我们通过SSH客户端连接树莓派,在树莓派中通过查看 Git 版本信息&#xff0c;我们只能看到最高版本显示为 2.30.2&#xff0c;并且通过apt安装也无法将Git更新到最新版。 git --version sudo apt upgrade git那么我们只能通过从源代码来构建安装Git了&…

单片机复习题第二章

1.在AT89S52单片机中&#xff0c;如果采用6MHz晶振&#xff0c;一个机器周期为2us。 时钟周期的振荡频率为fosc&#xff0c;则时钟周期T1/fosc。 一个机器周期包括12个时钟周期。 2.内部RAM中&#xff0c;位地址为40H&#xff0c;88H的位&#xff0c;该位所在字节的字节地址分别…

scrollIntoView 的使用

描述 将调用此方法的元素滚动到浏览器窗口的可见区域。 scrollIntoView 官方文档 用法 element.scrollIntoView() 用法同 element.scrollIntoView(true) element.scrollIntoView(alignToTop) true 表示 element 元素顶部与可见区域的顶部对齐&#xff0c;默认值false 表示 el…

基于html+css的图展示56

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…