「数据结构」栈:题解

🎇个人主页:Ice_Sugar_7
🎇所属专栏:Java数据结构
🎇欢迎点赞收藏加关注哦!

  • 🍉简介
  • 🍉栈的常用方法
  • 🍉栈的应用
    • 🍌逆波兰表达式求值
    • 🍌出栈入栈顺序匹配
    • 🍌最小栈问题

🍉简介

栈是一种特殊的线性表,它只允许在固定的一端进行插入和删除元素操作

概念区分

栈、虚拟机栈、栈帧有什么区别?

  • 栈是一种数据结构
  • 虚拟机栈是JVM划分的一块内存
  • 栈帧是调用方法时,在虚拟机中给这个方法开辟的一块内存

因为它的结构比较简单,所以本文中我们就不专门去实现它了,直接刷题吧!

🍉栈的常用方法

方法功能
Stack()创建一个空的栈
E push(E e)将e入栈,并返回e
E pop()将栈顶元素出栈并返回
E peek()获取栈顶元素
int size()获取栈中有效元素个数
boolean empty()检测栈是否为空

🍉栈的应用

🍌逆波兰表达式求值

题目链接

思路:遍历字符串数组,如果遇到数字字符,就把它转换为整型,然后入栈;如果遇到运算符,那就从栈中取出两个数字,将它们进行相应的运算,运算结果入栈
遍历完之后,栈中只剩下一个元素,它就是表达式的值

class Solution {Stack<Integer> stack = new Stack<>();  //存放数字public int evalRPN(String[] tokens) {for(String str:tokens) {if(str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) {int num2 = stack.pop();int num1 = stack.pop();switch (str) {case "+":stack.push(num1+num2);break;case "-":stack.push(num1-num2);break;case "*":stack.push(num1*num2);break;case "/":stack.push(num1/num2);break;}} else {stack.push(Integer.parseInt(str));}}return stack.peek();}
}

涉及到的知识点

  • 字符串比较内容是否相同
  • 将字符串转为整型

🍌出栈入栈顺序匹配

题目链接

思路:

  1. 建一个栈stack,遍历入栈数组,将里面的元素入栈。定义一个变量j,初始化为0,表示出栈数组的下标
  2. 每入一个元素,就将它和出栈数组的元素进行比较,如果相等,那就出栈,然后 j++。这个比较的过程可能有多次,所以我们写成一个while循环
  3. 如果出入栈顺序匹配,那最终栈就为空,反之则不为空
class Solution {Stack<Integer> stack = new Stack<>();public boolean validateStackSequences(int[] pushed, int[] popped) {int len = pushed.length;int j = 0;for(int i = 0;i < len;i++) {stack.push(pushed[i]);while(!stack.isEmpty() && stack.peek() == popped[j]) {stack.pop();++j;}}return stack.isEmpty();}
}

🍌最小栈问题

题目链接

思路:用两个栈来实现这个“最小栈”:普通栈stack和存储stack当前最小值的minstack
下面解释一下minstack的运转机制:

  1. 将一个元素a入栈stack时,把a和minstack栈顶元素b作比较(如果minstack为空,那就直接让a入minstack)
  2. 如果a < b,那就让a入minstack;反之则不用入

通过这两步,我们就能确保minstack的栈顶元素永远是stack当前元素中的最小值

class MinStack {public Stack<Integer> stack = new Stack<>();public Stack<Integer> minstack = new Stack<>();public MinStack() {}public void push(int val) {stack.push(val);if(minstack.isEmpty()) {minstack.push(val);} else {int top = minstack.peek(); //取minstack栈顶值与val比较//注意这里要取到等号if(val <= top) {minstack.push(val);}}}public void pop() {if(stack.isEmpty()) {return;}//出stack,比较出栈的值是否和minstack栈顶值相等,若相等,那minstack也要出栈int pop = stack.pop();if(pop == minstack.peek()) {minstack.pop();}}public int top() {if(stack.isEmpty()) {return -1;} else {return stack.peek();}}public int getMin() {if(minstack.isEmpty()) {return -1;} else {return minstack.peek();}}
}

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

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

相关文章

《动手学深度学习(PyTorch版)》笔记6.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

不看后悔之Spring Framework篇:Spring MVC架构与控制器设计的艺术

目录 开篇&#xff1a;拥抱Spring MVC&#xff0c;构建高效Java EE Web应用一、Spring MVC核心架构概览 1.1 请求处理流程1.2 关键组件解析&#xff1a;DispatcherServlet、Controller、ModelAndView 二、基于注解的Spring MVC控制器设计 2.1 RequestMapping详解2.2 Controlle…

力扣 第 383 场周赛 解题报告 | 珂学家 | Z函数/StringHash

前言 谁言别后终无悔 寒月清宵绮梦回 深知身在情长在 前尘不共彩云飞 整体评价 T3是道模拟题&#xff0c;但是感觉题意有些晦涩&#xff0c;T4一眼Z函数&#xff0c;当然StringHash更通用些。 新年快乐, _. T1. 将单词恢复初始状态所需的最短时间 I 思路: 模拟 就是前缀和为…

C++ 哈希+unordered_map+unordered_set+位图+布隆过滤器(深度剖析)

文章目录 1. 前言2. unordered 系列关联式容器2.1 unordered_map2.1.1 unordered_map 的概念2.1.2 unordered_map 的使用 2.2 unordered_set2.2.1 unordered_set 的概念2.2.2 unordered_set 的使用 3. 底层结构3.1 哈希的概念3.2 哈希冲突3.3 哈希函数3.4 哈希冲突的解决3.4.1 …

芯片级原子钟,国产原子钟,芯片原子钟、国产芯片级微型原子钟介绍

原子钟已经为天文、航海、宇宙航行等领域提供了强有力的保障。但是&#xff0c;目前这些器件体积庞大&#xff0c;重量也很大&#xff0c;达几百千克。要成为平常人可使用的实用功能&#xff0c;原子钟的尺寸需要大幅缩小&#xff0c;而精度和速度需要被保留。 文章介绍的此类…

linux设置固定ip

进入目录 cd /etc/sysconfig/network-scripts 找到对应的配置文件,一般是ifcfg-ens开头的 vim ifcfg-ens192 BOOTPROTOstatic 网络类型配置,static代表静态ip IPADDR就是你要设置的ip

并发容器【ConcurentHashMap、CopyOnWriteArrayList、阻塞队列、ArrayBlockingQueue】

并发容器 什么是并发容器?同步容器:并发容器: ConcurrentHashMap结构图JDK1.7结构图JDK1.8结构图 CopyOnWriteArrayList实现原理 并发队列阻塞队列ArrayBlockingQueue 转自极客时间 什么是并发容器? 在JUC包中&#xff0c;有一大部分是关于并发容器的&#xff0c;如Concurr…

ref用法

目录 React中提供两种方法创建ref对象&#xff1a; 类组件获取 Ref 三种方式 ① Ref属性是一个字符串。 ② Ref 属性是一个函数。 ③ Ref属性是一个ref对象。 高级用法1&#xff1a;forwardRef 转发 Ref 高级用法2&#xff1a;ref实现组件通信 【ref作用】&#xff1a;最…

e^{ix} 的 conjugate value(复共轭)

e^{ix} 的 conjugate value 正文实数的复共轭 e i x e^{ix} eix 的复共轭推导 正文 这里简单说明一下 e i x e^{ix} eix 的复共轭。 实数的复共轭 首先&#xff0c;我们知道&#xff0c;所谓复共轭是针对复数而言的。对于实数&#xff0c;我们知道&#xff0c;实数集被复数…

年假作业day2

1.打印字母图形 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) { int i,j; char k; for(i1;i<7;i) { for(j1;j<i;j) { printf("%c",_); } for(j0,…

2.6学习总结

2.6 1.蓝桥公园 2.路径 3.打印路径 4.【模板】Floyd Floyd算法&#xff1a; 是一种多源的最短路径算法&#xff0c;经过一次计算可以得到任意两个点之间的最短路径。 这种算法是基于动态规划的思想&#xff1a; m[i][j]表示从i到j这条边的距离&#xff0c;dp[k][i][j]表示从…

【Vue3】解决路由缓存问题(响应路由参数的变化)

官方文档解释&#xff1a; 解决问题的思路: 让组件实例不复用,强制销毁重建监听路由变化,变化之后执行数据更新操作 方案一&#xff1a;给router-view添加key 以当前路由完整路径为key 的值&#xff0c;给router-view组件绑定 <RouterView :key"$route.fullPath&qu…

如何使用Docker部署Nginx容器实现无公网ip远程访问本地服务

文章目录 1. 安装Docker2. 使用Docker拉取Nginx镜像3. 创建并启动Nginx容器4. 本地连接测试5. 公网远程访问本地Nginx5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 在开发人员的工作中&#xff0c;公网远程访问内网是其必备的技术需求之一。对于…

mvn常见报错:Failed to read artifact descriptor for 解决

问题&#xff1a; mvn打包时报错&#xff1a;Failed to read artifact descriptor for 产生原因&#xff1a; 项目打包时所需的依赖包不存在本地仓库&#xff0c;或本地仓库文件存在问题。 解决方法&#xff1a; 检查仓库可用性&#xff1a; 确保在Maven设置或pom.xml中指定…

引入BertTokenizer出现OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.

今天在跑一个模型的时候出现该报错&#xff0c;完整报错为&#xff1a; OSError: Cant load tokenizer for bert-base-uncased. If you were trying to load it from https://huggingface.co/models, make sure you dont have a local directory with the same name. Otherwis…

npm 上传一个自己的应用(3) 在项目中导入及使用自己上传到NPM的工具

上文 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们创建了一个函数 并发上了npm 最后 我们这里 我们可以看到它的安装指令 这里 我们可以打开一个vue项目 终端输入 我们的安装指令 npm i 自己的包 如下代码 npm i grtest我们在 node_modules目录 下…

Python 套接字详解:与网络通信的温柔邂逅

网络世界&#xff0c;犹如一片无垠的海洋&#xff0c;充满了无限的可能性和无尽的探索。而在这个浩瀚的网络宇宙中&#xff0c;Python 语言以其简洁优雅、功能丰富而备受青睐。在 Python 的世界里&#xff0c;有一个神奇的工具&#xff0c;它就像是一座桥梁&#xff0c;将不同的…

dbeaver免费、跨平台数据管理软件

下载 dbeaver是一款的数据库连接工具&#xff0c;免费&#xff0c;跨平台。 官网&#xff1a;DBeaver Community | Free Universal Database Tool下载地址&#xff1a;Download | DBeaver Community 点击下载 安装 修改安装路径 点击安装 点击完成 使用 连接mysql 已连接 点…

JAVASE进阶:一文精通Stream流+函数式编程

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;JAVASE进阶&#xff1a;源码精读——HashMap源码详细解析 &#x1f4da;订阅专栏&#xff1a;JAVASE进阶 希望文章对你们有所帮助…

万物皆可问 — 私有部署网易有道QAnything

什么是 QAnything&#xff1f; QAnything&#xff08;Question and Answer based on Anything&#xff09;是一个本地知识库问答系统&#xff0c;旨在支持多种文件格式和数据库&#xff0c;允许离线安装和使用。使用QAnything&#xff0c;您可以简单地删除本地存储的任何格式的…