【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 hereint 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();}};

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基于微信小程序的校园外卖平台系统,附源码

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

web自动化测试系列-如何选择实战项目(四)

目录 1.项目安装 2.项目优点 3.项目介绍 3.1 项目介绍 3.3 商品展示 接上文 &#xff1a;web自动化测试系列-页面元素该如何定位?(三)-CSDN博客 在后续的技术操作中都将会使用到项目 &#xff0c;如果你有自己的练手项目 &#xff0c;优先拿自己的项目做练习&#xff0c…

DFS:floodfill算法解决矩阵联通块问题

floodfill&#xff0c;翻译为洪水灌溉&#xff0c;而floodfill算法本质上是为了解决在矩阵中性质相同的联通块问题。 一、图像渲染 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int dx[4]{0,0,1,-1};int dy[4]{1,-1,0,0};int prev;//记住初始值int m,…

【随笔】Git 高级篇 -- 整理提交记录(上)cherry-pick(十五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

【Linux实践室】Linux高级用户管理实战指南:创建与删除用户组操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux创建用户组命令2.1.1 知识点讲解2.1.2…

建模实例评点(2)领域类图-食谱

1 00:00:00,290 --> 00:00:04,120 这是之前我们给一个用户 2 00:00:04,130 --> 00:00:05,360 给他出食谱的 3 00:00:05,370 --> 00:00:06,480 这样做的一个 4 00:00:06,650 --> 00:00:08,000 你认为你系统最重要的 5 00:00:08,010 --> 00:00:09,360 一个核心…

Vue基础知识:编程式导航有几种跳转方式?通过路径跳转(比较简单),通过路由名字跳转(适合路径名字比较长的情况)

1.通过路径跳转&#xff08;比较简单&#xff09; this.$router.push(路由路径)this.$router.push({path:路由路径 }) 案例演示&#xff1a; 1.简写 点击按钮 2.完整写法 绑定事件与上方相同&#xff0c;效果也相同。 2.通过路由名字跳转&#xff08;适合路径名字比较长的情…

Magic Circles FX

这个包包括10个魔法圈效果。 支持所有平台(PC/控制台/移动设备/VR/…)。 PC演示 -支持HDRP/LWRP!-开箱即用(只需拖放) -演示场景包括(村庄、角色、动画) -HDR Bloom粒子/效果 -帧混合动画 -适用于2D和3D 下载:​​Unity资源商店链接资源下载链接 效果图:

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

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

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2&#xff0c;它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权&#xff1a; -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Linux下Qt生成程序崩溃文件

文章目录 1.背景2.Qt编译生成程序2.1.profile模式的本质 3.执行程序&#xff0c;得到core文件4.代码定位4.1.直接使用gdb4.2.使用QtCreator 5.总结6.题外话6.1.profile模式和debug模式的区别 1.背景 在使用Qt时&#xff0c;假如在windows&#xff0c;当软件崩溃时&#xff0c;…

百度文心大模型推理成本降至1% / 马斯克起诉OpenAI |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 百度文心大模型推理成本降至1%&#xff0c;与三星、荣耀等企业达成合作 马斯…