当前位置:网站首页>面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
面试高频考题解法——栈的压入弹出序列、有效的括号、逆波兰表达式求值
2022-08-01 23:58:00 【陈亦康】
目录
热身:
1 . 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A: 1,4,3,2 B: 2,3,4,1 C: 3,1,4,2 D: 3,4,2,1
分析:这里有个隐含条件,压栈序列1,2,3,4,当时压栈,当时就可以出栈,简单来讲,让1进栈时,当时就可以将1弹出栈,再往后进栈;
如此分析,只有B选项符合条件:1进栈,2进栈,与B选项第一个出栈序列匹配,弹出2,再看进栈序列中:1与弹出序列的3不匹配,继续对进栈序列的下一个元素比较,如此往复,可得出答案。
JZ31栈的压入、弹出序列
思路:
- 创建一个栈stack
- 对进栈序列先压栈再与出栈序列比较
- 若相等则弹出
import java.util.*;
import java.util.ArrayList;
public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
Stack<Integer> stack = new Stack<>();
int count = 0;//计数:与压栈数据匹配则加一
for(int i = 0; i < pushA.length; i++){
if(pushA[i] == popA[count]){
//先压栈,再判断
stack.push(pushA[i]);
while(stack.peek() == popA[count]){
stack.pop();
count++;
//popA遍历完说明正确
if(count == pushA.length){
return true;
}
/**
*弹出栈后,可能一个元素也不剩,这时再到while里判断,
*有可能能造成对空指针的解引用操作
*/
if(stack.empty()){
break;
}
}
}
else{
stack.push(pushA[i]);
}
}
return false;
}
}
逆波兰表达式求值
博主已整理出博客,快去看看吧~
有效的括号
也是对栈的理解中,频率较高的考题
思路:
1.创建一个栈
2.大的方向上遍历给定数组
3.小的方向上比较是否匹配
注意:不匹配分为以下几种情况
a.左右括号不匹配
b.右括号多:当前下标是右括号,但栈为空
c.左括号多:字符串数组遍历完成,但栈仍不为空
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(ch == '(' || ch == '{' || ch == '['){
stack.push(ch);
}
else{
//说明ch是右括号
if(stack.empty()){
//右括号多
return false;
}
char tmp = stack.peek();
if(tmp == '(' && ch == ')' ||
tmp == '{' && ch == '}' ||
tmp == '[' && ch == ']'){
//当前括号匹配
stack.pop();
}
else{
//左右括号不匹配
return false;
}
}
}
//判断是否为空
if(stack.empty()){
return true;
}
else{
//左括号多
return false;
}
}
}
边栏推荐
- How to reinstall Win11?One-click method to reinstall Win11
- 如何进行数据库备份
- Artifact XXXwar exploded Artifact is being deployed, please wait...(已解决)
- 不就是个TCC分布式事务,有那么难吗?
- 【Leetcode】473. Matchsticks to Square
- 面试必问的HashCode技术内幕
- Enterprise firewall management, what firewall management tools are there?
- OpenCV DNN blogFromImage()详解
- 月薪12K,蝶变向新,勇往直前—她通过转行测试实现月薪翻倍~
- 【ACWing】230. 排列计数
猜你喜欢
单片机遥控开关系统设计(结构原理、电路、程序)
GIF制作-灰常简单的一键动图工具
ICLR 2022 Best Paper: Partial Label Learning Based on Contrastive Disambiguation
QML package management
Quartus uses tcl files to quickly configure pins
cdh6 opens oozieWeb page, Oozie web console is disabled.
如何进行数据库备份
cdh6打开oozieWeb页面,Oozie web console is disabled.
在CDH的hue上的oozie出现,提交 Coordinator My Schedule 时出错
Enterprise firewall management, what firewall management tools are there?
随机推荐
QML包管理
Flink学习第四天——完成第一个Flink 流批一体案例
CDH6 Hue to open a "ASCII" codec can 't encode characters
Flink Yarn Per Job - CliFrontend
@WebServlet注解(Servlet注解)
easy-excel 解决百万数据导入导出,性能很强
1个月写900多条用例,二线城市年薪33W+的测试经理能有多卷?
Unity—四元数、欧拉角API+坐标系统
Deliver cloud-native microservices applications with Zadig
YOLO等目标检测模型的非极大值抑制NMS和评价指标(Acc, Precision, Recall, AP, mAP, RoI)、YOLOv5中[email protected]与
2022还想上岸学习软件测试必看,测试老鸟的肺腑之言...
在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password YES) 拒绝访问问题解决
WEB安全基础 - - - XRAY使用
Several interview questions about golang concurrency
@Transactional注解在类上还是接口上使用,哪种方式更好?
【加密周报】经济衰退在加息气氛中蔓延 美联储“放手一搏”?盘点上周加密市场发生的重大事件
Excel文件读写(创建与解析)
Classical Literature Reading--DLO
async和await用法介绍
如何重装Win11?一键重装Win11方法