【OJ】stack刷题

个人主页 : zxctscl
如有转载请先通知

题目

  • 1. 155. 最小栈
    • 1.1 分析
    • 1.2 代码
  • 2. JZ31 栈的压入、弹出序列
    • 2.1 分析
    • 2.2 代码
  • 3. 150. 逆波兰表达式求值
    • 3.1 分析
    • 3.2 代码

1. 155. 最小栈

在这里插入图片描述

1.1 分析

利用两个栈,一个栈a负责入数据和出数据,另一个_min负责放存入数据中目前最小的数。
如果_min中没有数据,那么a入数据的时候,它也入。但是_min里面放的是a中目前最小的数据,所以如果数据小于_min的top所放的数据时也插入。那么相等时候的的数据_min插不插入呢?
在这里插入图片描述
当然val和_min.top()数据相同时候也插入。因为再删除数据的时候,当a栈顶出栈的时候,_min栈顶同时也得出栈,这样才能保证_min.top()里面能够保存的是最小值。
所以pop得这样写:

  void pop() {
        if(a.top()==_min.top())
        {       
            _min.pop();
        }
        a.pop();
    }

题目要求返回最小值,那么就是返回_min.top():

    int getMin() {
       return _min.top();
    }

在这里插入图片描述

1.2 代码

class MinStack {
public:
    MinStack() {  }
    
    void push(int val) {
     a.push(val);
     if(_min.empty()||val<= _min.top())
     {
        _min.push(val);
     }
    }
    
    void pop() {
        if(a.top()==_min.top())
        {       
            _min.pop();
        }
        a.pop();
    }
    
    int top() {
       return a.top();
    }
    
    int getMin() {
       return _min.top();
    }
    stack<int> a;
    stack<int> _min;
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

2. JZ31 栈的压入、弹出序列

在这里插入图片描述

2.1 分析

这里用了两个栈,想要匹配出栈的顺序,最简单的方法就是:
先把入栈序列入栈,如果出现入栈序列和出栈序列的栈顶元素相同,那么两边就同时出数据,直到入栈序列和出栈序列的栈顶元素不匹配,或者出栈序列为空。
想要知道最后匹不匹配就直接判断一下入栈序列是否为空。为空就是已经匹配,否则就不匹配。

在这里插入图片描述

2.2 代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pushV int整型vector 
     * @param popV int整型vector 
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
          int pushi=0,popi=0;
          stack<int> st;
          while(pushi<pushV.size())
          {
            st.push(pushV[pushi++]);
            while(!st.empty()&&st.top()==popV[popi])
            {
                ++popi;
                st.pop();
            }
          }
          return st.empty();

    }
};

3. 150. 逆波兰表达式求值

在这里插入图片描述

3.1 分析

逆波兰表达式就是后缀表达式,而我们一般用的是中缀表达式。
举个例子:把中缀表达式换成后缀表达式
在这里插入图片描述
用例1来分析一下:
在这里插入图片描述
在没有遇到第一个算符之前,就把数据入栈,当遇到运算符,就把它前面两个数2和1出,计算出来结果就是2+1=3,然后再把这个3再入栈;当再一次遇到表达式时候,又把它的前面两个数出栈做对应的运算之后,在把算出的结果入栈,最后输出栈顶元素就可以了。
在这里插入图片描述

在这里插入图片描述

3.2 代码

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> st;
        set<string> s={"+","-","*","/"};
        for(auto&str:tokens)
        {
            if(s.find(str)!=s.end())
            {
                int right=st.top();
                st.pop();
                int left=st.top();
                st.pop();
                switch(str[0])
                {
                    case '+':
                         st.push(left+right);
                         break;
                    case '-':
                         st.push(left-right);
                         break;
                    case '*':
                         st.push(left*right);
                         break;
                    case '/':
                         st.push(left/right);
                         break;
                }
            }
            else{
                st.push(stoi(str));
            }
        }
     return st.top();
    }
   
};

有问题请指出,大家一起进步!!!

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

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

相关文章

分类预测 | Matlab实现DRN深度残差网络数据分类预测

分类预测 | Matlab实现DRN深度残差网络数据分类预测 目录 分类预测 | Matlab实现DRN深度残差网络数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现DRN深度残差网络数据分类预测&#xff08;完整源码和数据&#xff09;&#xff0c;运行环境为Matl…

合宙开发板Core_Air780E测试AT指令

一、官方资料 CORE-AIR780E 开发板是合宙通信推出的基于 Air780E 模组所开发的&#xff0c;包含电源&#xff0c;SIM 卡&#xff0c;USB&#xff0c;天线&#xff0c;音频等必要功能的最小硬件系统。以方便用户在设计前期对 Air780E 模块 进行性能评估&#xff0c;功能调试&…

CUDA10的安装

1、因为要用到tensorflow1.15.5的GPU版本&#xff0c;所以想安装cuda10来进行加速&#xff0c;通过nvidia-smi检查本机上的CUDA版本 2、下载的cuda10版本&#xff0c;cuda_10.0.130_411.31_win10.exe 下载的cudnn版本&#xff0c;cudnn-10.0-windows10-x64-v7.6.4.38.zip 然后…

mathtype如何嵌入到word中?mathtype 7永久激活码密钥及2024最新序列号附安装教程

将MathType嵌入到Word中的方法主要有三种&#xff0c;分别是&#xff1a; 通过加载项嵌入MathType。首先&#xff0c;在Word中点击“文件”按钮&#xff0c;选择“选项”&#xff0c;然后选择“加载项”一栏&#xff0c;找到MathType相关的加载项并勾选&#xff0c;点击“确定…

20240404这个数字有什么特点吗?

今天是2024年的清明节&#xff0c;20240404这个数字让我提出了一个疑问&#xff0c;它是否有什么含义或者特点呢&#xff1f; 首先&#xff0c;如果把它拆分为两个整数的平方和&#xff0c;会怎么样呢&#xff1f; 于是&#xff0c;我一顿操作猛如虎&#xff0c;搞出了这么个…

html--烟花3

html <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Canvas烟花粒子</title> <meta name"keywords" content"canvas烟花"/> <meta name"description" content"can…

Kubernetes学习笔记8

Kubernetes集群客户端工具kubectl 我们已经能够部署Kubernetes了&#xff0c;那么我们如何使用Kubernetes集群运行企业的应用程序呢&#xff1f;那么&#xff0c;我们就需要使用命令行工具kubectl。 学习目标&#xff1a; 了解kubectl 命令帮助方法 了解kubectl子命令使用分…

看不惯各种信息收集表,我手写了一个身份证号输入组件

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 背景 shigen最近的需要填写各种报名表的场景有点多&#xff0c;很多场景都要输…

三防笔记本丨加固笔记本丨三防笔记本电脑赋能车辆检修

随着汽车数量的不断增加和交通运输行业的发展&#xff0c;车辆检修行业成为了保障交通安全和延长车辆寿命的重要领域。在车辆检修过程中&#xff0c;需要使用各种工具和设备来进行检测、维修和保养&#xff0c;而信息化技术的应用正逐渐渗透到这一行业中&#xff0c;为检修工作…

【C++】背包问题

目录 背包问题01 背包背包不装满问题背包必须满问题 完全背包 背包问题 背包问题属于动态规划的一类题型 01 背包 背包不装满问题 背包必须满问题 #include <iostream> using namespace std; const int N 1010; #include <vector> int main() {int n , V;int v[…

如何做好产业园运营?树莓集团:响应政府号召,规划,注重大局观

随着经济的发展和产业结构的调整&#xff0c;产业园区的建设和发展已经成为推动地方经济的重要力量。如何做好产业园运营&#xff0c;提高行业竞争力&#xff0c;现已成为了一个亟待解决的问题。树莓集团作为一家有着丰富产业园运营经验的企业&#xff0c;积极响应政府号召&…

从头开发一个RISC-V的操作系统(五)汇编语言编程

文章目录 前提RISC-V汇编语言入门RISC-V汇编指令总览汇编指令操作对象汇编指令编码格式add指令介绍无符号数 练习参考链接 目标&#xff1a;通过这一个系列课程的学习&#xff0c;开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文章和知识来自于…

地面站Mission Planner从源码编译与运行

0. 环境 - win10&#xff08;基本需要100G硬盘&#xff09; - ubuntu18 1. 安装vs2022 下载 vs2022 community 在线安装包。 https://visualstudio.microsoft.com/ 打开 Visual Studio Installer 先安装 Visual Studio Community 2022本体。占用1.2GB。 Visual Studio Inst…

【linux】ubuntu ib网卡驱动如何适配

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

JQuery(一)---【JQuery简介、安装、初步使用、各种事件】

零.前言 在学习JQuery前&#xff0c;您需要具备以下知识&#xff1a; HTML相关知识(DOM)CSS相关知识JavaScript相关知识 一.JQuery 1.1JQuery简介 JQuery是一个JavaScript的“函数库”&#xff0c;不是JavaScript的一个框架&#xff0c;与“VUE、REACT”有本质区别&#x…

浅析智能数据采集技术在数字化转型中的核心作用|电商数据采集API接口的核心应用

随着科技的飞速发展和全球化的深入推进&#xff0c;数字化转型已经成为企业和社会发展的必然趋势。在这一背景下&#xff0c;智能数据采集技术作为数字化转型的核心驱动力&#xff0c;正发挥着越来越重要的作用。本文将从智能数据采集技术的定义、特点、应用场景以及对企业的影…

神经网络学习笔记10——RNN、ELMo、Transformer、GPT、BERT

系列文章目录 参考博客1 参考博客2 文章目录 系列文章目录前言一、RNN1、简介2、模型结构3、RNN公式分析4、RNN的优缺点及优化1&#xff09;LSTM是RNN的优化结构2&#xff09;GRU是LSTM的简化结构 二、ELMo1、简介2、模型结构1&#xff09;输入2&#xff09;左右双向上下文信…

ThingsBoard通过MQTT发送属性数据

MQTT基础 客户端 MQTT连接 属性上传API 案例 MQTT基础 MQTT是一种轻量级的发布-订阅消息传递协议&#xff0c;它可能最适合各种物联网设备。 你可以在此处找到有关MQTT的更多信息&#xff0c;ThingsBoard服务器支持QoS级别0&#xff08;最多一次&#xff09;和QoS级别1&…

计算机考研精选1000题,408科目高频考点

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

【Ambari】Ansible自动化部署大数据集群

目录 一&#xff0e;版本说明和介绍信息 1.1 大数据组件版本 1.2 Apache Components 1.3 Databases支持版本 二&#xff0e;安装包上传和说明 三&#xff0e;服务器基础环境配置 3.1global配置修改 3.2主机名映射配置 3.3免密用户名密码配置 3.4 ansible安装 四. 安…