【Leetcode每日一题】 综合练习 - 逆波兰表达式求值(难度⭐⭐)(73)

news2024/11/16 11:39:49

1. 题目解析

题目链接:150. 逆波兰表达式求值

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

2.算法原理

  1. 数据结构选择
    • 使用栈(stack<int>)来存储操作数,以便进行后进先出(LIFO)的操作。
    • 使用哈希映射(map<string, function<int(int, int)>>)来存储操作符及其对应的操作函数。
  2. 操作符函数映射
    • 通过map容器建立操作符到操作函数的映射,使得在遍历表达式时能够快速找到对应的操作符函数。
  3. 遍历表达式
    • 遍历输入的逆波兰表达式(RPN)中的每一个标记(tokens)。
  4. 操作符处理
    • 如果当前标记是操作符,则从栈中弹出两个操作数(右操作数在前,左操作数在后)。
    • 使用哈希映射中对应的操作函数对这两个操作数进行计算,并将结果压回栈中。
  5. 操作数处理
    • 如果当前标记是操作数,则将其转换为整数(stoi(s))并压入栈中。
  6. 结果返回
    • 遍历结束后,栈中只剩下一个元素,即逆波兰表达式的计算结果,返回该元素作为函数结果。
  7. 注意事项
    • 本算法假设输入的逆波兰表达式是有效的,即不包含无效的操作符、操作数以及除法运算中的零除错误。
    • 逆波兰表达式的特点是操作符在操作数之后,因此不需要考虑操作符的优先级问题。

3.代码编写

class Solution 
{
public:
    int evalRPN(vector<string>& tokens) 
    {
        stack<int> st;
        map<string, function<int(int, int)>> opfunc
        {
            {"+", [](int x, int y){return x + y;}},
            {"-", [](int x, int y){return x - y;}},
            {"*", [](int x, int y){return x * y;}},
            {"/", [](int x, int y){return x / y;}}
        };
        for(auto& s : tokens)
        {
            if(opfunc.find(s) != opfunc.end())
            {
                int r = st.top();
                st.pop();
                int l = st.top();
                st.pop();
                st.push(opfunc[s](l, r));
            }
            else
            {
                st.push(stoi(s));
            }
        }
        return st.top();
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

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

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

相关文章

OpenHarmony 3.2 Release版本实战开发——Codec HDI适配过程

简介 OpenHarmony Codec HDI&#xff08;Hardware Device Interface&#xff09;驱动框架基于 OpenMax 实现了视屏硬件编解码驱动&#xff0c;提供 Codec 基础能力接口供上层媒体服务调用&#xff0c;包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

OpenMVS学习笔记(一):WSL编译安装测试

1.CUDA和CUDNN安装 [1] WSL版本cuda安装&#xff1a; >> wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin >> sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 >> wg…

Burp Suite (bp)启动激活报错问题

一、自查 1、从哪里下载程序 【大部分同学的问题&#xff0c;都是重新下载解决的&#xff0c;简单快速直接】 一律使用“常用软件”中提供的Burp Suite软件包&#xff0c;方便排查问题 自带JDK的版本 Burp 2024.3&#xff0c;自带JDK21&#xff0c;双击bat即可启动&#xff…

YOLOv8网络结构介绍

将按照YOLOv8目标检测任务、实例分割任务、关键点检测任务以及旋转目标检测任务的顺序来介绍&#xff0c;主要内容也是在目标检测任务中介绍&#xff0c;其他任务也只是Head层不相同。 1.YOLOv8_det网络结构 首先&#xff0c;YOLOv8网络分成了三部分&#xff0c;分别是主干网络…

Java | Spring框架| 集合与复杂类型的注入:处理多值依赖

集合与复杂类型的注入&#xff1a;处理多值依赖 在Spring框架中&#xff0c;除了可以注入简单的依赖类型&#xff0c;如字符串、整数等&#xff0c;还可以注入集合类型和复杂类型的数据。集合类型包括List、Set、Map和数组&#xff0c;而复杂类型可以是自定义的对象、配置类等…

【JavaEE网络】用Form与Ajax构建HTTP请求

目录 通过 form 表单构造 HTTP 请求form 发送 GET 请求form 发送 POST 请求 通过 ajax 构造 HTTP 请求发送 GET 请求发送 POST 请求发送 application/json 数据封装 ajax 方法 通过 form 表单构造 HTTP 请求 form (表单) 是 HTML 中的一个常用标签. 可以用于给服务器发送 GET …

janus源码分析

基础说明 janus官网 https://janus.conf.meetecho.com/index.html janus源码地址 https://github.com/meetecho/janus-gateway 编译及部署参考 https://pro-hnb.blog.csdn.net/article/details/137730389?spm1001.2014.3001.5502 https://pro-hnb.blog.csdn.net/article/deta…

QT设计模式:策略模式

基本概念 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列方法&#xff0c;并使它们可以相互替换。策略模式使得算法可以独立于客户端而变化&#xff0c;使得客户端可以根据需要选择相应的算法。 策略模式通常由以下角色组…

AutoDL服务器远程桌面

文章目录 1.安装VNC和必要的一些图形显式库:2.SSH隧道2.1.本地安装openssh服务器2.2.服务开启2.3.显示当前安装的 SSH 版本信息2.3.设置一个 SSH 隧道 注意3.VNC Viewer客户端登录4.测试5.参考 VNC&#xff08;Virtual Network Computing &#xff09;是一种图形化的桌面共享协…

mac电脑如何安装java

1、检查当前系统的 Java 版本 打开终端,输入以下命令查看当前 Java 版本 /usr/bin/java -version 2、前往 Java 官网下载 Java JDK 打开 Java 官网 (https://www.java.com/zh-CN/download/) 并下载最新版本的 Java JDK。 3、安装 Java JDK 双击下载的 .dmg 文件启动安装程序…

力扣爆刷第135天之数组五连刷(双指针快慢指针滑动窗口)

力扣爆刷第135天之数组五连刷&#xff08;双指针快慢指针滑动窗口&#xff09; 文章目录 力扣爆刷第135天之数组五连刷&#xff08;双指针快慢指针滑动窗口&#xff09;一、704. 二分查找二、27. 移除元素三、977. 有序数组的平方四、209. 长度最小的子数组五、59. 螺旋矩阵 II…

【C++初阶】第十站:vector 中通用函数的模拟实现

目录 vector中的三个重要迭代器 默认成员函数 构造函数(无参构造) 构造函数(函数模板) 构造函数(带有默认参数) size_t int 拷贝构造函数 赋值重载 析构函数 迭代器相关函数 begin和end 容量和大小相关函数 size capacity resize 修改容器内容相关函数 reser…

自动驾驶学习2-毫米波雷达

1、简介 1.1 频段 毫米波波长短、频段宽,比较容易实现窄波束,雷达分辨率高,不易受干扰。波长介于1~10mm的电磁波,频率大致范围是30GHz~300GHz 毫米波雷达是测量被测物体相对距离、相对速度、方位的高精度传感器。 车载毫米波雷达主要有24GHz、60GHz、77GHz、79GHz四个频段。 …

使用Postman进行接口测试---解析postman页面

一、Postman 是一款流行的 API 测试工具&#xff0c;它提供了丰富的功能来帮助开发者测试和调试 API。以下是 Postman 页面上的主要功能及其含义和作用&#xff1a; 1. 请求详情&#xff08;Request Details&#xff09; &#xff1a; - 方法&#xff08;Method&#xff0…

Disk Doctor for Mac 免激活版:数据安全守卫者

数据丢失是每个人都可能遇到的问题&#xff0c;但Disk Doctor for Mac能让这个问题迎刃而解。这款强大的数据恢复软件&#xff0c;能迅速找回因各种原因丢失的数据。 Disk Doctor采用先进的扫描技术&#xff0c;能深入剖析磁盘&#xff0c;找到并恢复被删除或损坏的文件。同时&…

JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f235;Function方法 与 函数式编程&#x1f49d;1 call &#x1f49d…

竞赛课第十周(巴什游戏,尼姆博弈)

目录 目的: 实验内容: 第一题 思路&#xff1a; 【参考代码】 【运行结果】 第二题 输入&#xff1a; 输出&#xff1a; 【参考代码】 【运行结果】 目的: 熟悉并掌握公平组合游戏 &#xff08;1&#xff09;巴什游戏、尼姆游戏 &#xff08;2&#xff09;图游戏…

rs485自动收发电路

R/RO&#xff1a;receive/receive out&#xff0c;接收&#xff0c;连接单片机的 rx D/DI&#xff1a;drive/drive in&#xff0c;驱动&#xff0c;连接单片机的 tx 自动控制电路的目的就是在 tx 空闲&#xff08;空闲为高并&#xff09;时拉低 RE 和 DE&#xff0c;工作&…

B/S模式的web通信

这里写目录标题 目标实现的目标 服务器代码&#xff08;采用epoll实现服务器&#xff09;整体框架main函数init_listen_fd函数&#xff08;负责对lfd初始化的那一系列操作&#xff09;epoll_run函数 一级目录二级目录二级目录二级目录 目标 实现的目标 我们要实现&#xff0c;…

Hive-URL解析函数

Hive-URL解析函数 1.实际工作需求 2.URL的基本组成 3.Hive中的Url解析函数 parse_url函数 parse_url_tuple函数